使用jQuery提高选择器性能

时间:2013-06-17 14:05:09

标签: javascript jquery performance query-performance

我一直在看一些网站,他们都谈论使用标签选择器而不是类来提高性能。

例如,这个:

$("input.myclass");

而不是:

$(".myclass");

例如:

他们都声称JavaScript只有getElementByIdgetElementsbyTagName,而不是直接选择类的方法。

过去3年有变化吗?他们现在能够按班级选择吗? 我用jsperf测试它,看起来类选择器到目前为止更快: http://jsperf.com/class-vs-input

我还看了一下其他人的测试并显示了相同的结果:http://jsperf.com/selectors-perf/3

这些在去年发生了变化吗?我们现在应该按类而不是按标签进行选择吗? 我在哪里可以看一下本机实现类选择器的浏览器版本?

感谢。

1 个答案:

答案 0 :(得分:2)

现在已经改变了。

大多数浏览器都在实施:

var matches = document.body.querySelectorAll('div.highlighted > p');

在javascript中实现它们。

这就是jQuery现在使用的内容;它正在实施sizzle.js, 选择器js库,用于选择是使用querySelector还是常规getElementsByTagName函数;

例如,对于jquery构造函数$() 如果第一个参数是一个字符串:$(iAmAString), 然后,如果字符串的第一个字母是#,则jquery将调用document.getElementById(iAmAString.substr(0))。 如果不是,它会让sizzle处理是否调用querySelector,具体取决于浏览器的兼容性和字符串的复杂性。

以及许多其他令人敬畏的事情。

在选择元素时,使用基本函数和缓存经常使用的选择器时,最精确的是,当通过这个大链和/或甚至绕过整个链时,将减少检查次数。

对于某些网站来说,这产生了一种特殊的效果,即产生一种令人敬畏的独角兽骑行小猫的效果,还有更多的话要说:

兼容性支持在这里 https://developer.mozilla.org/en-US/docs/Web/API/Element.querySelectorAll