bind()比live()和delegate()更快吗?

时间:2011-08-11 17:37:09

标签: jquery performance events jquery-mobile

我的团队正在使用jQuery Mobile构建一个移动网站,当我们接近发布日期时,性能变得越来越受关注。我发现的一个观察是,我们在整个代码中对live()delegate()进行了大量调用;但事实上,据我所知,我们只是永远使用这些方法将事件处理程序附加到已经存在的DOM节点(并且始终存在于我们的上下文中)应用程序)。

鉴于live()delegate()都旨在提供动态绑定到DOM中可能出现 的节点,并考虑到每个节点都涉及处理事件我们一直在向document根节点冒泡,我想知道我们是否会通过将这些调用(在适当情况下)更改为bind()来改善性能。

我知道我自己可能会以某种方式对此进行测试,但我没有很多使用JavaScript进行性能测试的经验,而且我认为可能需要更长的时间才能弄明白我会简单地问社区。有没有人测试过这个?有可衡量的差异吗?或者将这些live()delegate()来电转换为bind()是浪费时间吗?

4 个答案:

答案 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有更多的事件时间开销。

.live() vs .bind()

查看我的搜索结果

答案 3 :(得分:0)

bind用于直接在元素上绑定事件。因此,仅当元素存在时,才会附加事件,其中livedelegate也用于动态元素。这取决于您的使用,但实时和委托提供的性能优于bind