我正在为 CMS 编写一些测试,我需要知道某个类名是否在文档中。
所以我去研究检查文档中是否存在类名的最快方法是什么。你可以在这里看到我的基准:http: //jsperf.com/if-class-exists
如果您运行测试,您会看到“getElementsByClassName”是迄今为止最快的(99%)。这让我想知道 jQuery 是否甚至会检查是否有可用的本机类选择器。
这让我想知道什么是最好的方法,因为快速测试类名对我来说至关重要。
我正在为 CMS 编写一些测试,我需要知道某个类名是否在文档中。
所以我去研究检查文档中是否存在类名的最快方法是什么。你可以在这里看到我的基准:http: //jsperf.com/if-class-exists
如果您运行测试,您会看到“getElementsByClassName”是迄今为止最快的(99%)。这让我想知道 jQuery 是否甚至会检查是否有可用的本机类选择器。
这让我想知道什么是最好的方法,因为快速测试类名对我来说至关重要。
我想你已经用 jsperf 回答了你自己的问题。如果速度在特定操作中对您非常重要,并且此测试是您需要的有效衡量标准,那么请自行测试getElementsByClassName
并使用它(如果可用),因为它在您的 jsperf 中显示速度快 400 倍。
jQuery 调用具有合理数量的设置开销,如果您单步执行,您可以看到这些开销。我可以想象在一个小文档中,这种设置开销可能会以一种在具有更大 DOM 的文档中不会被看到的方式扭曲您的 jsperf 结果 - 所以我建议您使用更大的 DOM 验证您的结果这可能是您将调用此文件的更典型的文件。
根据这个文档,jQuery 应该getElementsByClassName
用于一个简单的类选择器。
编辑:我在 jQuery 中逐步完成了这个函数调用$('.select')
。它在内部使用 getElementsByClassName ,但是在它到达那里之前有很多开销(甚至包括运行一个复杂的正则表达式),因为 jQuery 令人难以置信的一般性质(它必须测试很多东西才能确定你想要的是什么一个简单的类名选择器)。
我认为如果你在你的 jsPerf 中添加一个大的 DOM,性能差距可能会缩小,因为 jQuery 设置开销将是整个执行时间的一小部分,但我没有看到太大的变化。getElementsByClassName('.selector')
all 本身的调用速度比jQuery('.selector')
.