在jQuery中通过id选择时指定上下文是否有速度优势?

时间:2012-03-19 08:51:23

标签: jquery

假设DOM中没有重复的ID,$parent是一个包含单个元素的jQuery对象,该元素是#myID的父元素

var $el = $("#myID");

VS

var $el = $("#myID", $parent);  //Faster or slower?

这两者之间是否存在速度差异?

2 个答案:

答案 0 :(得分:3)

无论需要检查多少元素,查找都很快,因为浏览器使用哈希表进行ID查找,这些查找可以在O(1)中执行查找。

指定上下文甚至可能会减慢速度,因为在初始查找之后需要检查以查找找到的元素是否是context元素的子元素 - 并且此检查很可能涉及迭代找到的元素的所有父元素直到根元素,以查看上下文是否是这些元素之一。现在采用不是单个元素的上下文,它将更加昂贵。

答案 1 :(得分:2)

  

在jQuery中按id选择时,指定上下文是否有速度优势?

不,它实际上会让事情变得更慢(或者至少,可以),因为jQuery有一个特殊的路径用于简单的ID选择器并使用document.getElementById - 但前提是你不要给出一个背景。所以给出一个上下文会减慢速度(或者至少,可能减慢速度),因为jQuery将无法使用该快捷方式。相关检查位于当前未压缩的jQuery版本(v1.7.1)的第135行。