我一直在看一些网站,他们都谈论使用标签选择器而不是类来提高性能。
例如,这个:
$("input.myclass");
而不是:
$(".myclass");
例如:
他们都声称JavaScript只有getElementById
和getElementsbyTagName
,而不是直接选择类的方法。
过去3年有变化吗?他们现在能够按班级选择吗? 我用jsperf测试它,看起来类选择器到目前为止更快: http://jsperf.com/class-vs-input
我还看了一下其他人的测试并显示了相同的结果:http://jsperf.com/selectors-perf/3
这些在去年发生了变化吗?我们现在应该按类而不是按标签进行选择吗? 我在哪里可以看一下本机实现类选择器的浏览器版本?
感谢。
答案 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