我应该将.on('click')事件附加到文档或元素中

时间:2013-07-03 08:34:48

标签: javascript jquery javascript-events

昨天我正在阅读.on()的jQuery文档,其中说明了:

  

避免在大型文档上过度使用文档或document.body进行委派活动

但今天,我正在查看此JSPERF,并且当点击事件附加到文档时,我注意到更好的性能。

所以现在,我很困惑。性能测试反对文档?

3 个答案:

答案 0 :(得分:7)

您的JSPerf在这里测试附加事件的速度,而不是它们对累积页面性能的影响。这是测试的错误!

Javascript事件一直向上传播到文档根目录。这意味着,如果on("click", ...)上有document处理程序,那么文档中每个元素上的每次点击都将最终运行一个事件处理程序,所以jQuery可以测试它的来源是否与委托目标匹配,看它是否应该传递给该事件处理程序。

想象一下,您的页面在文档上有10个不同的委派事件处理程序,所有处理各种点击。每次单击页面中的任何元素时,事件将冒泡到文档根目录,并且必须测试所有10个处理程序以确定应该运行哪个(如果有)。

通常,您希望委派事件尽可能在树中尽可能地启用您的功能,因为这会限制可能调用此事件的元素数量,并且您可以提前处理事件以防止它发生传播DOM树。

答案 1 :(得分:0)

这取决于。 当然,您可以将处理程序附加到您想要的任何元素,在某些情况下,您必须将其附加到documentbody(例如,如果您想要定位 all < / em>页面上的链接)。但是,如果您确定某些元素将始终只出现在给定元素(已经创建)中 - 那么为了性能,您可以将事件处理程序附加到该公共父元素。

答案 2 :(得分:0)

重点是过度

任何DOM的恕我直言过多代表是可怕的