Javascript jQuery选择器性能:按ID与按ID模式标记
我对使用jQuery非常陌生,因此我相处得很好,可以得到预期的结果,但这里有一个关于性能的问题,对此我不确定答案: 假设预期的选择实际上是一个Javascript jQuery选择器性能:按ID与按ID模式标记,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我对使用jQuery非常陌生,因此我相处得很好,可以得到预期的结果,但这里有一个关于性能的问题,对此我不确定答案: 假设预期的选择实际上是一个,以下哪一个选择器性能最好 $(“textarea[id='someID']) $(“#someID”) 提前谢谢 $(“someID”)会快得多 因为它基本上使用标准javascript文档。getElementById函数通过id选择始终是最快的方法,因为它使用javascripts自己的getElementById实现 在我的机器上(Win8,
,以下哪一个选择器性能最好
$(“textarea[id='someID'])代码>
$(“#someID”)代码>
$(“someID”)代码>会快得多
因为它基本上使用标准javascript文档。getElementById
函数通过id
选择始终是最快的方法,因为它使用javascripts自己的getElementById
实现
在我的机器上(Win8,FF16.0.2),属性选择器的速度93%第二个选择器将更快,因为它直接映射到文档。getElementById
您可以检查结果要获得最快的结果,您必须在jquery对象中包装js getElementById:
$(document.getElementById('myid'));
请参见,因为按ID选择单个元素是一个性能问题<代码>:P
在我的情况下,这确实不是性能问题。。。但是,是否应该等到出现性能问题后再了解最佳实践?自由地使用$(“#foo”)
,这从来都不是问题。在循环中执行查询时会出现性能问题。(缓存查询,var$elems=$('.elems');
,然后在循环中使用$elems
)另一个性能问题是大页面上的全局查询。如果.elems
元素是#foo
元素的后代,那么$('.elems','#foo')
将比全局$('.elems')
查询执行得更好。此外,避免长链,$(“.thing”,“wrapper”)
的性能优于$(“#wrapper ul li.thing”)
。我想这差不多涵盖了这一切<代码>:)@PaulD.Waite如果证据很重要,请设置性能。这是一个众所周知的事实,当一个id单独传入时,jQuery在内部使用document.getElementByID。@Paul看一下jQuery源中的“Sizzle”函数,更不用说设置一个jsperf来测试选择单个元素是不值得的,在编写良好的代码中,这永远不会成为性能瓶颈。@KevinB虽然选择单个元素可能不是瓶颈,但与JSPerf相比,当选择器重复x千次时,它的速度(或缺少速度)是一个有趣的比较。