Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 委派“.on”比绑定“.on”快?_Jquery - Fatal编程技术网

Jquery 委派“.on”比绑定“.on”快?

Jquery 委派“.on”比绑定“.on”快?,jquery,Jquery,查看此测试: 我所做的是将孩子委托给给定的家长,并将另一个事件直接委托给孩子。测试(至少在Chrome中)似乎表明,委托方法明显快于直接绑定方法。这真的违背了我读到的关于jQuery的所有内容,也违背了我认为它的意图。是我的测试错了,还是我们真的应该使用委托方法?请注意,父对象与子对象之间甚至没有祖先那么近 此fiddle还确认使用此DOM和JS适当触发事件: 想法 编辑:为了澄清,我的具体问题是,为什么在这个测试中,委托方法(传统上被认为较慢)比绑定方法(被认为更快)快得多 我刚写了一个

查看此测试:

我所做的是将孩子委托给给定的家长,并将另一个事件直接委托给孩子。测试(至少在Chrome中)似乎表明,委托方法明显快于直接绑定方法。这真的违背了我读到的关于jQuery的所有内容,也违背了我认为它的意图。是我的测试错了,还是我们真的应该使用委托方法?请注意,父对象与子对象之间甚至没有祖先那么近

此fiddle还确认使用此DOM和JS适当触发事件:

想法

编辑:为了澄清,我的具体问题是,为什么在这个测试中,委托方法(传统上被认为较慢)比绑定方法(被认为更快)快得多

  • 我刚写了一个糟糕的测试吗
  • jsperf基准测试是不是搞砸了
  • 我们真的应该一直使用委派方法吗,因为它更优越

我相信真正的答案会随之而来,但你问的是你的想法

我的想法是,在现代系统中,几乎不可能始终如一地预测给定结构将如何影响性能

你会得到这一点的解释,在思考了一段时间后,你会相信这一点(或者可能会发现这是一个测量错误),但从长远来看,它不会让你真正了解如何更好地编写代码。此外,在不同的浏览器/平台/版本/工作日,它的工作方式也会有所不同

问题是,如果有一个构造他们希望你经常使用(因为人们通常都是这样编码的),他们会首先对它进行优化,它可能会执行得更快。这样做的结果是,在代码下面的级别所做的性能改进通常会使编写良好的代码优于手工优化的代码


这意味着您永远不应该为性能而编码,为清晰和枯燥而编码。如果你这样做,碰到一个障碍,在那里一些客户或经理判断它太慢(得到性能要求!),然后考虑在每一个平台上的测量之前和之后对它进行重新编码。进行比较,确保“优化”的解决方案实际上是值得的,但缺乏明确性,并且实际满足要求。在代码中记录您为什么这样做,这样以后就不会有其他人来纠正您糟糕的编码风格了。

我肯定会有真正的答案,但您需要思考

我的想法是,在现代系统中,几乎不可能始终如一地预测给定结构将如何影响性能

你会得到这一点的解释,在思考了一段时间后,你会相信这一点(或者可能会发现这是一个测量错误),但从长远来看,它不会让你真正了解如何更好地编写代码。此外,在不同的浏览器/平台/版本/工作日,它的工作方式也会有所不同

问题是,如果有一个构造他们希望你经常使用(因为人们通常都是这样编码的),他们会首先对它进行优化,它可能会执行得更快。这样做的结果是,在代码下面的级别所做的性能改进通常会使编写良好的代码优于手工优化的代码


这意味着您永远不应该为性能而编码,为清晰和枯燥而编码。如果你这样做,碰到一个障碍,在那里一些客户或经理判断它太慢(得到性能要求!),然后考虑在每一个平台上的测量之前和之后对它进行重新编码。进行比较,确保“优化”的解决方案实际上是值得的,但缺乏明确性,并且实际满足要求。在代码中记录您这样做的原因,这样以后就不会有其他人来纠正您糟糕的编码风格了。

可能是
。单击
快一点。模糊
?:D@neoascetic我现在反转了它们,时差仍然大致相同。可能是因为当您使用
。on
方法时,事件不会一直在DOM中冒泡。它会在您创建它时提供的选择器处停止(在您的例子中是
。孩子
)。您的测试不是很好。在测试中包括DOM选择和日志记录,而不仅仅是测试触发器。您正在测试两种不同的事件类型。我修复了您的测试,直接绑定速度更快@JasonTowne:除非您使用
停止播放
停止播放,否则事件将继续冒泡。可能是
。单击
快一点。模糊
?:D@neoascetic我现在反转了它们,时差仍然大致相同。可能是因为当您使用
。on
方法时,事件不会一直在DOM中冒泡。它会在您创建它时提供的选择器处停止(在您的例子中是
。孩子
)。您的测试不是很好。在测试中包括DOM选择和日志记录,而不仅仅是测试触发器。您正在测试两种不同的事件类型。我修复了您的测试,直接绑定速度更快@JasonTowne:除非您使用
stopPropagation
停止事件,否则事件会一直冒泡。