Javascript 使用jQuery提高选择器性能
我一直在浏览一些网站,他们都在谈论使用标记选择器而不是类来提高性能 例如,这:Javascript 使用jQuery提高选择器性能,javascript,jquery,performance,query-performance,Javascript,Jquery,Performance,Query Performance,我一直在浏览一些网站,他们都在谈论使用标记选择器而不是类来提高性能 例如,这: $("input.myclass"); 与此相反: $(".myclass"); 例如: 他们都声称JavaScript只有getElementById和getElementsbyTagName,而没有直接选择类的方法 在过去的三年里,这种情况发生了变化吗?他们现在可以按班级进行选择了吗? 我在用jsperf测试它,似乎类选择器的速度要快得多: 我还查看了其他人的测试,并显示了相同的结果: 这在去年发生了变化吗
$("input.myclass");
与此相反:
$(".myclass");
例如:
他们都声称JavaScript只有getElementById和getElementsbyTagName,而没有直接选择类的方法
在过去的三年里,这种情况发生了变化吗?他们现在可以按班级进行选择了吗?
我在用jsperf测试它,似乎类选择器的速度要快得多:
我还查看了其他人的测试,并显示了相同的结果:
这在去年发生了变化吗?我们现在应该按类而不是按标记选择吗?
我在哪里可以看到浏览器的版本以本机方式实现类选择器
谢谢。现在已经变了
大多数浏览器都实现了:
var matches = document.body.querySelectorAll('div.highlighted > p');
在它们的javascript实现中
这就是jQuery现在在内部使用的功能;它正在实现sizzle.js,
选择器js库,用于选择是使用querySelector还是常规getElementsByTagName函数
例如,对于jquery构造函数函数$
如果第一个参数是字符串:$iAmAString,
然后,如果字符串的第一个字母是a,jquery将调用document.getElementByIdiAmAString.substr0。
如果不是,它将让sizzle根据浏览器的兼容性和字符串的复杂性来处理是否调用querySelector
还有很多其他很棒的东西
在选择元素时做到最精确,使用基本函数并缓存常用的选择器,将减少通过此大链和/或甚至绕过整个链时的检查次数
对于一些网站来说,这产生了一种独特的效果,产生了一种令人敬畏的骑独角兽小猫的效果,还有什么要说的呢:
兼容性支持就在这里
您的第一个jsperf完全不相关。这些选择器根本不具有可比性。您应该使用的选择器是$.demo和$input.demo.:复选框是jQuery伪选择器,效率不高。如果有的话,您应该使用[type=checkbox]。在效率之外,我认为在做这件事的时候要考虑的一件重要事情是,有时候你不想要某一类的所有元素,你只是想要那些满足某一条件的东西,比如在一个DIVI里面,如果你认为input.class比……好,你就必须看一看。请注意,搜索是从右到左进行的,因此如果使用输入和。一起学习:@passionateCoder我不认为更快,我想问的是,这在过去几年中是否发生了变化,因为过去人们说的是相反的。@Ian感谢您提供的信息,但是,与我发布的链接相比,类选择器比标记选择器中的类更快吗?@Steve不,我明白,我只是想指出第一个jsperf并不公平。您的第二个jsperf和另一个评论者的jsperf更有意义,并且明确显示简单选择器更快。我认为在过去几年中,jQuery选择器引擎有时使用的Sizzle的使用已经减少了,取而代之的是原生DOM方法。Sizzle虽然效率不高,但非常可靠且一致,因此在较旧的浏览器中搜索时,它可能工作得更好。test和input.test之间不会有这样的区别