【发布时间】:2011-01-26 04:18:16
【问题描述】:
我正在阅读 Brandon Aaron here 的这篇文章,关于 jquery 上下文如何提供帮助。所以我想自己做一个测试。所以这就是我所做的。
在之前创建的“#context”中创建了一个 id="context" 的 DIV 和一个 id="holder" 的嵌套 DIV。
创建了一个深度为 18 的嵌套 DIV,并将
<div id="context"><div id="holder"></div></div>附加到它上面,从而得到 20 个嵌套 DIV现在我测试了通过以下选择器访问“#holder”所花费的时间:
一种。$("#holder") // no context
湾。$("#holder", "#context") // with "#context" selector string
C。$("#holder", $("#context")) // sending jquery object each time with selector "#context"
d。$("#holder", $context) // where, var $context = $("#context"). Caching jquery obj
记录了访问X = 1000次以及开始和结束时间差的每个案例。我发现花费的时间是:
case(a) 是最不一致的 28-32 毫秒 [jquery-1.3.2]
case(b)+(c) 的最高时间分别为 60-65 毫秒和 70-75 毫秒
case(d) 有 40-50 毫秒,有 1 或 2 个尖峰值。
这种类型的基本检查有效吗?您可以在 JSBIN 使用 JS 代码here。
[如果我能以某种方式改进此测试,请告诉我]
如果是,那么这个“上下文”真的有什么帮助?
#NOTE:在 jsbin 编辑模式下也将 jquery-1.3.2 替换为 jquery-1.4.2,你会惊讶地看到数字上升:P
【问题讨论】:
-
这是一个很好的发现。正如 Coronus 所说,对于 #id 选择器,您不应该传递上下文。但这就是原生和 jQuery 之间的差距。对于重复的 id,使用
document.getElementById()将始终获得第一个匹配项。$('#dupeId', '<selector>')可以使第二个或多个具有重复 id 的元素可访问。
标签: jquery jquery-selectors performance