我做了一个小的JSPerf来测试JavaScript中事件绑定的性能。我知道原生JavaScript会是最快的,但真正让我惊讶的是jQuery比它慢得多。而且在JavaScript对象和jQuery对象上运行jQuery绑定之间存在很大的差异。
我使用的代码如下。 此代码的JSPerf在此处。
var div = document.createElement('DIV');
var handler = function(){};
var jq_div = $('div');
// #1 - native javascript test code
div.addEventListener('click', handler);
// #2 - jquery event binding on javascript object
$(div).on('click', handler);
// #3 - jquery event binding on jquery object
jq_div.on('click', handler);
能有人为我解释一下这些差异,特别是第二种和第三种情况之间的差异。我没有预料到会有很大的区别。还有,是否有任何方法可以提高jQuery事件绑定的性能?
非常感谢您的努力。
div
添加了事件处理程序,而原生代码只添加了一个(用于新创建的那个)。 - Teemudiv
创建jQuery对象的时间。对于#2的公平测试应该是在测试循环之外使用var $div = $(div);
,然后在循环内部只使用$div.on('click',handler);
。 - Tian van Heerden