JQuery的on()与它的前身[live()、绑定()、委派()]的性能对比

6mw9ycah  于 2022-09-21  发布在  jQuery
关注(0)|答案(1)|浏览(100)

JQuery API文档指出,我们应该使用较新的on()函数,而不是将Even处理程序附加到元素的旧方法(有时已过时)。

根据我的理解,on()需要绑定到页面中“当前存在”的元素(DOM)。在构建页面大多是动态加载(通过AJAX)和注入的Web站点的今天,这几乎迫使我们将其绑定到文档元素。

我主要使用live()方法来绑定“未来元素”。这对我来说工作得很好,但我不能简单地用较新的on()替换我的live(),因为我的元素还不存在,如果存在,就什么都不能用。

我可以简单地使用$(document).on(),但我害怕它似乎会给事件交付带来巨大的开销。至少从我从他们的文件中了解到的。

有人能对on()函数在我的特定情况下可能带来的惩罚发表评论吗?如果有人可以评论一下jQuery不断地弃用他们的事件绑定API(在这种情况下不向后兼容)的合理性是什么?

l0oc07j2

l0oc07j21#

嗯,它们基本上都是一样的

这是bind的来源

function (types, data, fn) {
    return this.on(types, null, data, fn);
}

这是live的来源

function (types, data, fn) {
    jQuery(this.context).on(types, this.selector, data, fn);
    return this;
}

这是delegate的来源

function (selector, types, data, fn) {
    return this.live(types, data, fn, selector);
}

它们基本上都是一样的,你可能只需看一眼就能猜到性能上的差异,

总而言之,所有3on()“前辈”都做了注解,但称他们为“继任者”。
正如评论中提到的,Rochas已经制作了一个jsPerf,它将通过在您的浏览器中运行测试来向您显示性能差异,live测试中的两个失败是因为现在不兼容的jQuery版本,但正如您从源代码中看到的,它无论如何都与On相同。jsPerf Benchmark

相关问题