哪个更适合用作性能角度:
$(".div1 h2, .div1 h3")
或者
$(".div1").find("h2, h3")
哪个更适合用作性能角度:
$(".div1 h2, .div1 h3")
或者
$(".div1").find("h2, h3")
你的问题的答案是:是的。
不要担心性能差异,除非您的代码很慢。如果是,请使用分析器来确定瓶颈。
从分析的角度:
$(".div1 h2, div1 h3")
应该更快,因为 jQuery 将通过管道querySelectorAll
(如果存在)和本机代码将比非本机代码运行得更快。它还可以节省额外的函数调用。
$(".div1").find("h2, h3")
如果您计划将一些其他功能链接到.div1
以下内容会更好:
$(".div1").find("h2, h3").addClass('foo').end().show();
其实,.find()CAN更快。
尝试选择多个元素时,选择器似乎比 find 更快;但是,如果您使用 $.find,甚至缓存后代,您会发现它的速度要快得多:http : //jsperf.com/selector-vs-find-again/11
我也乞求不同关于性能不重要。在这个智能手机的世界里,电池寿命是王道。
我刚刚找到了这个答案,并想在这里添加一些数字,可能有人会发现它们有帮助和好奇。就我而言,我jQuery
为唯一元素寻找最快的选择器。我不喜欢无缘无故地添加 ID,所以我寻找选择没有 ID 的元素的方法。
在我的小型研究中,我使用了很棒的 jQuery选择器分析器。这是我在添加分析器的库代码后直接从 Chrome 控制台启动的代码:
$.profile.start()
// Lets
for (i = 0; i < 10000; i++) {
// ID with class vs. ID with find(class)
$("#main-menu .top-bar");
$("#main-menu").find(".top-bar");
// Class only vs element with class
$( ".top-bar" );
$( "nav.top-bar" );
// Class only vs class-in-class
$( ".sticky" );
$( ".contain-to-grid.sticky" );
}
$.profile.done()
以下是结果:
jQuery profiling started...
Selector Count Total Avg+/-stddev
#main-menu .top-bar 10000 183ms 0.01ms+/-0.13
nav.top-bar 10000 182ms 0.01ms+/-0.13
.contain-to-grid.sti... 10000 178ms 0.01ms+/-0.13
.top-bar 10000 116ms 0.01ms+/-0.10
.sticky 10000 115ms 0.01ms+/-0.10
#main-menu 10000 107ms 0.01ms+/-0.10
undefined
最慢的选择器位于此图表的顶部。最快的是在底部。令我惊讶的是,在通过 ID 选择器之后,$('#main-menu')
我发现了单类选择器,例如.top-bar
和.sticky
。干杯!