Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery提高选择器性能_Javascript_Jquery_Performance_Query Performance - Fatal编程技术网

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之间不会有这样的区别