Chrome事件触发在大型DOM中需要很长时间

时间:2012-10-09 09:56:39

标签: jquery performance google-chrome dom

我有一个相对较大的DOM,并且在触发元素上的事件时注意到chrome的性能下降令人难以置信。单个事件,例如:

myElem.trigger('myevent.myscope',arguments);

需要14ms !! (22.0.1229.92 m)

firefox 15.0.1和msie 9中的同一事件需要不到1ms才能触发!

该元素是一个jquery对象,并且已被缓存,因此在触发器之前不会发生DOM查找。我正在使用console.time()

console.time('trigger');
myElem.trigger('myevent.myscope',arguments);
console.timeEnd('trigger');

有人能否对这种情况有所了解

由于

加里

1 个答案:

答案 0 :(得分:1)

这不是你问题的直接答案。

但根据我对自定义事件的经验,我会避免使用触发器/ jquery事件。

取决于jQuery版本。触发器在dom树上冒泡,这可能需要相当长的时间。

  

“从jQuery 1.3开始,.trigger()ed事件冒出DOM树; a   事件处理程序可以通过返回false来停止冒泡   处理程序或调用事件对象上的.stopPropagation()方法   进入了这个活动。 “ - trigger

我个人的解决方案是使用Peter Higgins Pubsub

我创建了一个jsperf测试,显示了jquerys'on'的性能差异(蓝色是pubsub,红色是jquery,Longer更好[每秒操作数]); PUBSUB vs Jquery http://jsperf.com/peter-higgins-pubsub-vs-tiny-pubsub

从现在开始,我在处理自定义事件时使用pubsub,在点击,鼠标悬停等事件时使用jquery。

只是我的2点。