5

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

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

需要 14 毫秒!!(22.0.1229.92 米)

firefox 15.0.1 和 msie 9 中的相同事件触发时间不到 1 毫秒!

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

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

有人可以对这种情况有所了解吗

谢谢

加里

4

1 回答 1

1

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

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

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

“从 jQuery 1.3 开始,.trigger()ed 事件在 DOM 树中冒泡;事件处理程序可以通过从处理程序返回 false 或在传递给事件的事件对象上调用 .stopPropagation() 方法来停止冒泡。” -扳机

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

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

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

只是我的2美分。

于 2012-10-26T01:09:17.043 回答