与'getElementsByClassName'+ Benchmarks相比,jQuery中的类选择器出乎意料地慢

时间:2011-07-27 16:02:28

标签: javascript jquery getelementsbyclassname

我正在为CMS编写一些测试,我需要知道文档中是否有某个类名。

所以我去研究检查文档中是否存在类名的最快方法。您可以在此处查看我的基准:http://jsperf.com/if-class-exists

如果你运行测试,你会看到'getElementsByClassName'是迄今为止最快的(99%)。这让我想知道jQuery是否会检查是否有可用的本机类选择器。

这让我想知道什么是最好的方法,因为对我来说测试类名真的很快是至关重要的。

1 个答案:

答案 0 :(得分:4)

我想你已经用jsperf回答了你自己的问题。如果速度对于您在特定操作中非常重要,并且此测试是您需要的有效度量,那么请对getElementsByClassName进行自己的测试,并在可用时使用它,因为它在jsperf中显示速度提高了400倍。

jQuery调用具有合理数量的设置开销,如果您单步执行,则可以看到。我可以想象在一个小文档中,这个设置开销可能会使你的jsperf结果偏向于在具有更大DOM的文档中看不到的方式 - 所以我建议你用更大的DOM来验证你的结果这可能是您将要调用此文档的更典型的文档。

根据this doc,jQuery应该使用getElementsByClassName作为简单的类选择器。

编辑:我在jQuery $('.select')中完成了此函数调用。它在内部使用getElementsByClassName,但是在它到达之前有很多开销(包括甚至运行复杂的正则表达式),因为jQuery具有令人难以置信的一般性质(它必须先测试很多东西,然后才能确定你想要的是什么一个简单的类名选择器。)

我认为如果你在jsPerf中添加一个大的DOM,性能差距可能会缩小,因为jQuery设置开销将占整个执行时间的一小部分,但我没有看到太多变化。 getElementsByClassName('.selector')全部调用的速度比jQuery('.selector')快。