Nic*_*ick 18 performance jquery
我想知道哪个选项更好,特别是在速度方面:
$('#id tag')...
Run Code Online (Sandbox Code Playgroud)
要么
$('#id').find('tag')...
Run Code Online (Sandbox Code Playgroud)
此外,如果您更改id
和/或更换tag
一个class
或类似的内容,相同的答案是否适用input:checked
?
例如,哪个更好:$('#id input:checked')...
或$('#id').find('input:checked');
?
Bea*_*rtz 16
您可以根据以下三点做出决定:
可读性
这与你的两个选择器没什么区别.就我而言,我更喜欢$('#id').find('inner')
语法,因为它更准确地描述了它实际上在做什么.
可重用性
如果您的代码的其他部分使用相同的id选择器(或其上下文中的某些内容),则可以缓存选择器并重用它.我自己发现重构像这样编写的代码更难$('#id inner')
,因为你必须首先解码css选择器,然后才能继续前进并找到可能的改进.
想象一下这两个案例并不复杂
$('#hello .class_name tag').doThis();
$('#hello .other_name input').doThat();
Run Code Online (Sandbox Code Playgroud)
而另一种情况
$('#hello').find('.class_name tag').doThis();
$('#hello').find('.other_name input').doThat();
Run Code Online (Sandbox Code Playgroud)
我想第二个例子尖叫着你"缓存id选择器",而第一个没有.
速度
性能总是一个好点,在这种情况下,id选择器find
在大多数浏览器中都能做得更好,因为它首先建立了上下文,并且可以将降序选择器应用于较小的元素子集.
如果你想在jQuery中更多地了解context-vs子集选择器性能,那么这是一个很好的性能测试.ID的子集通常是规则.当然,你可以得到不同的结果,但在大多数情况下,他们会这样做.
因此,从我的观点来看,子集选择器为3到0.
这是测试用例HTML,我在其中查找span
元素下的所有元素#i
:
<div id="i">
<span>testL1_1</span>
<span>testL1_2</span>
<div>
<span>testL2_1</span>
</div>
<ul>
<li>
<span>testL3_1</span>
</li>
</ul>
<div>
<div>
<div>
<div>
<span>testL5_1</span>
</div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
测试这三个jQuery选择器:
$("#i span"); // much slower
$("#i").find("span"); // FASTEST
$("span", "#i"); // second fastest
Run Code Online (Sandbox Code Playgroud)
http://jsperf.com/jquery-sub-element-selection
我已经在谷歌Chrome和Firefox上运行了它,它似乎.find()
是第三种情况紧随其后的第一种情况,而第一种情况则慢得多.
归档时间: |
|
查看次数: |
30395 次 |
最近记录: |