为什么jQuery中的事件绑定比本机javascript慢得多?

为什么jQuery中的事件绑定比本机javascript慢得多?,javascript,jquery,performance,Javascript,Jquery,Performance,我已经做了一些测试来测试Javascript中事件绑定的性能。我知道本地javascript将是最快的,但真正让我吃惊的是,jQuery的bug空间是多么的慢。在javascript对象上运行jQuery绑定和在jQuery对象上运行jQuery绑定有很大的区别 我使用的代码如下 有人能解释一下为什么这些差异,主要是案例2和案例3之间的差异吗。我没料到会有什么不同。还有,是否有任何方法可以提高jquery事件绑定性能 提前感谢您的努力 有人能解释一下为什么会有这些不同吗 jQuery必须完成本机

我已经做了一些测试来测试Javascript中事件绑定的性能。我知道本地javascript将是最快的,但真正让我吃惊的是,jQuery的bug空间是多么的慢。在javascript对象上运行jQuery绑定和在jQuery对象上运行jQuery绑定有很大的区别

我使用的代码如下

有人能解释一下为什么这些差异,主要是案例2和案例3之间的差异吗。我没料到会有什么不同。还有,是否有任何方法可以提高jquery事件绑定性能

提前感谢您的努力

有人能解释一下为什么会有这些不同吗

jQuery必须完成本机绑定所做的一切——加上jQuery用于其内部事件系统的大量开销

主要在案例2和案例3之间

您的var jq_div=$'div';这是错误的。它会选择页面中的所有div元素,并将事件绑定到所有这些元素;您需要var jq_div=$div;或var jq_div=$

有没有办法提高jquery事件绑定性能


不,绝对没有必要。与触发事件相比,绑定在应用程序中几乎从未发生过——这是一项非常罕见的任务。正如您的jsperf测试所确认的,它仍然每秒发生数千次,这已经足够快了。如果您确实发现自己需要一次将事件绑定到很多元素,请使用事件委派。

注意,jQuery示例向页面上找到的每个div添加了一个事件处理程序,本机代码只向新创建的div添加一个。抱歉,我编辑了JSPerf示例:我对JSPerf比较陌生,我没有意识到这一点。谢谢,现在我看到了其他数字,比我预期的更多。第2项不仅测量附加事件处理程序的时间,还测量从div创建jQuery对象的时间。对第2项更公平的测试是var$div=$div;在您的测试循环之外,然后在循环内部只要$div.on'click',handler;
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);