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

Dan*_*Tao 5 performance jquery events jquery-mobile

我的团队正在使用jQuery Mobile构建一个移动网站,当我们接近发布日期时,性能变得越来越受到关注.一个观察我做的是,我们有很多调用的live(),并delegate()在我们的代码; 但事实上,据我所知,我们只是不断用这些方法将事件处理程序附加到已经存在的(和DOM节点始终存在,在我们的应用程序的情况下).

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

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

SLa*_*aks 3

我没有测量任何东西,但live可能比bind大量元素更快,因为bind需要影响每个元素。

如果您的bind事件涉及 200 个元素,则 jQuery 需要循环遍历所有这些元素并调用addEventListener每个元素。
如果您live向 200 个元素添加一个事件,jQuery 只会向<body>.
然而,这意味着必须针对您拥有的每个选择器来测试冒泡到主体的每个事件live

因此,最快的选择应该是包含delegate尽可能少的元素(以便它获得更少的必须针对选择器进行测试的其他事件)