jQuery 选择器性能

Posted

技术标签:

【中文标题】jQuery 选择器性能【英文标题】:jQuery selector performance 【发布时间】:2011-03-20 04:09:03 【问题描述】:

为什么 id 选择器比 jQuery 中的类选择器更快?

【问题讨论】:

【参考方案1】:

jQuery 中最快的选择器是 ID 选择器 ($('#someid'))。这是因为它直接映射到原生 javascript 方法 getElementById()。

【讨论】:

...而且该方法肯定比遍历某个类的元素数组更快。【参考方案2】:

关于Id Selector的这些点也可能对你有所帮助。

第 1 点:

在按 Id 搜索时,

不限定您的选择器。

Id 搜索使用浏览器原生的 getElementById 方法(非常快

不好的方式

$("div#your-id")

最佳方式

$("#your-id")

第 2 点:

您应该始终缓存您的选择到某个变量

不好的方式

$("#myList").click( function() 
   $("#myList").hide(); 
);

最佳方式

var myList  = $("#myList");

myList.click( function() 
   myList.hide();  // No need to re-select #myList since we cached it
);

【讨论】:

【参考方案3】:

浏览器能够比使用类更快地通过 Id 检索元素。给定一个 ID,使用 getElementById 时返回一个或零个元素。这使得浏览器可以跟踪页面中元素的 Id,从而通过 Id 提供快速搜索操作。

按类名搜索需要查找具有给定类名的所有元素。尽管有些浏览器支持getElementsByClassName,但在内部它们需要遍历整个 DOM 树来获取它们。

jQuery 选择器充当这些原生函数的包装器,与 getElementsByTagNamequerySelectorquerySelectorAll 等其他函数一起使用(它还附带一个名为 Sizzle 的选择器库,如果浏览器使用缺少必要的原生函数)。

如果多个元素具有此 ID,则不定义行为。

因为它们引用了具有特定 ID 的 DOM 元素。另外,应该有

【讨论】:

以上是关于jQuery 选择器性能的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 选择器性能

jQuery 选择器的性能特征与 CSS 选择器的性能特征有何不同?

高性能jquery的几种优化

jQuery性能

带有 ID 的 jQuery 选择器的性能

jQuery 选择器性能:一个奇怪的案例