javascript - 与 'getElementsByClassName' + 基准相比,jQuery 中的类选择器出奇地慢

标签 javascript jquery getelementsbyclassname

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

所以我去调查检查文档中是否存在类名的最快方法是什么。你可以在这里看到我的基准测试:http://jsperf.com/if-class-exists

如果您运行测试,您会发现“getElementsByClassName”是迄今为止最快的 (99%)。这让我想知道 jQuery 是否会检查是否有可用的 native 类选择器。

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

最佳答案

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

jQuery 调用有一定数量的设置开销,您可以在单步执行时看到这一点。我可以想象在一个小文档中,这种设置开销可能会以一种在具有更大 DOM 的文档中不会看到的方式扭曲您的 jsperf 结果 - 所以我建议您使用更大的 DOM 验证您的结果这可能是您将调用它的文档中更典型的。

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

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

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

关于javascript - 与 'getElementsByClassName' + 基准相比,jQuery 中的类选择器出奇地慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847552/

相关文章:

javascript - Ember View 的 Twitter Feed 问题

javascript - 如何让 Next/Prev 链接留在 CarouFredSel 幻灯片的两侧

javascript - 从 Controller 输出到 HTML 表单

javascript - 如何以表格的形式用javascript显示数据库?

java - 在 EditText 中禁用滚动效果并且仍然有可见的光标

jquery - 更改 Bootstrap 表单元格中复选框的大小

javascript - 注入(inject)内容大小问题

javascript - querySelectorAll 和 getElementsBy* 方法返回什么?

php - 使用 getElementByClassName,并通过表单携带变量

javascript - 无法使用 JavaScript 更改 HTML 元素的颜色