我的团队正在使用jQuery Mobile构建一个移动网站,当我们接近发布日期时,性能变得越来越受关注。我发现的一个观察是,我们在整个代码中对live()
和delegate()
进行了大量调用;但事实上,据我所知,我们只是永远使用这些方法将事件处理程序附加到已经存在的DOM节点(并且将始终存在于我们的上下文中)应用程序)。
鉴于live()
和delegate()
都旨在提供动态绑定到DOM中可能出现 的节点,并考虑到每个节点都涉及处理事件我们一直在向document
根节点冒泡,我想知道我们是否会通过将这些调用(在适当情况下)更改为bind()
来改善性能。
我知道我自己可能会以某种方式对此进行测试,但我没有很多使用JavaScript进行性能测试的经验,而且我认为可能需要更长的时间才能弄明白我会简单地问社区。有没有人测试过这个?有可衡量的差异吗?或者将这些live()
和delegate()
来电转换为bind()
是浪费时间吗?
答案 0 :(得分:4)
这取决于你如何使用它,但在大多数情况下,委托提供最佳性能(不一定只有速度而是整体):
http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/
答案 1 :(得分:3)
我没有测量任何内容,但live
可能比bind
更快,因为bind
需要影响每个元素。
如果bind
事件发生在200个元素上,jQuery需要遍历所有这些元素并在每个元素上调用addEventListener
。
如果live
事件为200个元素,jQuery只会向<body>
添加一个事件处理程序。
但是,这意味着必须针对您拥有live
d的每个选择器测试每个冒充身体的事件。
因此,最快的选项应该是delegate
到尽可能少的元素(这样它就会减少必须针对你的选择器测试的其他事件)
答案 2 :(得分:2)
我对这三个做了一个简单的基准测试。一般来说,代表是最有效的。例外情况是绑定的元素是静态的并且是已知的。即使有多个静态元素,绑定也始终优于Delegate。 Bind确实有更多的初始开销,但Delegate有更多的事件时间开销。
查看我的搜索结果答案 3 :(得分:0)
bind
用于直接在元素上绑定事件。因此,仅当元素存在时,才会附加事件,其中live
和delegate
也用于动态元素。这取决于您的使用,但实时和委托提供的性能优于bind