哪个更快,.on()或.click()?

如果我有一个表格,其中包含删除记录的链接,这是连接点击事件的最佳方式? 引擎盖下的这些评估相同吗?

$("#table").on("click", ".delete", function(){ //do stuff }); 

要么

 $("#table .delete").click(function(){ //do stuff }); 

不,他们没有。

在你使用它们的方式……

.on() 你使用它(委托)的方式 ,将节省你在附件和内存的周期,因为它实际上并没有在那一刻附加事件,因为它提供了一个应用事件的动态元素未来的元素。

.click()将在执行时保存周期,因为它在那个时刻明确地将事件附加到每个匹配的元素,但实际上,这将是我寻找瓶颈的最后一个地方。

在这里阅读一些事件授权测试……

附加事件处理程序的性能测试……

这就像在C#询问更快的intstring 。 每种类型都有它的用途……
这不是关于哪个更快,而是关于什么时候使用。

允许您将事件附加到动态添加的元素,而click则不允许。

如果您没有“动态添加元素”,请单击,否则使用on

click更快,因为它直接将事件附加到元素上,其中on将事件附加到#table并查找.delete元素以触发事件,因此在触发click事件之前涉及一些代码执行。

虽然你不会看到任何差异,但差异可以忽略不计。

如果你只使用一个事件处理程序就足以处理.delete的任何数量的.delete元素,因为click将附加到每个.delete元素,以便on内存利用率方面更好。

在这种特殊情况下, .click(...)将(可能)较慢,因为它需要遍历每一行和每个与选择器匹配的单元格,并将处理函数附加到每一个。 在这种特殊情况下, on(...)可能更快,因为它将处理程序附加到表,而不是附加到具有.delete类的每个元素。

话虽这么说,在这两者之间进行选择时需要考虑一些事项:

  1. 你的选择器有多复杂? 如果你正在做$('#rootItem').on('click', '.foo .bar.baz .bum', function() { /* do stuff*/ }) ,这本身就会慢于$('#rootItem').on('click', '.foo', function() { /* do stuff*/ })因为选择器在前一种情况下更复杂。 在这种情况下,为附件付出代价可能更有意义,并使用click(...)来节省评估#rootItem每次点击的运行时成本,看它是否与选择器'.foo .bar.baz .bum'匹配'.foo .bar.baz .bum' 。 像你这样的简单单一类选择器( '.delete' )会表现得很好。
  2. 内容会动态变化吗? 如果是这样,您将负责在每个动态添加的项目上调用click(...) 。 只要你的“外部”选择器(在这种情况下为'#table' )不指向将动态添加的元素, on(...)函数就可以更好地处理这个问题。 将'#table'替换为'.table' ,并动态添加一个带有类table的新table ,新添加的表将从初始调用on(...)时不会附加事件处理程序。