jQuery单select器vs .find()
作为一个性能angular度来说,更好的做法是:
$(".div1 h2, .div1 h3")
要么
$(".div1").find("h2, h3")
你的问题的答案是:是的。
不要担心性能的差异,除非你的代码很慢 。 如果是,则使用分析器来确定瓶颈。
从分析的angular度来看:
$(".div1 h2, div1 h3")
应该更快,因为jQuery将通过querySelectorAll
(如果存在)pipe理它,并且本地代码运行得比非本地代码更快。 它也将节省一个额外的函数调用。
$(".div1").find("h2, h3")
如果您计划在.div1
上链接一些其他function,则效果会更好:
$(".div1").find("h2, h3").addClass('foo').end().show();
其实.find()可以更快。
当尝试select多个元素时,select器似乎会更快地find; 然而,如果你使用$ .find,或者甚至caching后代,你可以看到它快得多: http : //jsperf.com/selector-vs-find-again/11
我也要求不同的performance不重要。 在这个智能手机的世界里,电池寿命是王道。
使用jsPerf 。
我为你创造了一个 。
我刚刚find这个答案,并希望在这里添加一些数字,可能有人觉得他们有帮助和好奇。 在我的情况下,我寻找最快的jQuery
select器的独特元素。 我不喜欢没有理由添加ID,所以我寻找方式来select没有ID的元素。
在我的小研究中,我使用了jQuery select器分析器 。 以下是我添加分析器的库代码后直接从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
最慢的select器位于该图表的顶部。 最快的是在底部。 令人惊讶的是,我select了ID即$('#main-menu')
我发现了单个类select器,例如.sticky
.top-bar
和.sticky
。 干杯!