我想知道以下哪个jQuery查询会更快.我正在寻找匹配具有src属性或data-src属性的所有span标签的方法.
var a = $('span[src],span[data-src]');
var b = $('span').filter('[src],[data-src]');
我的直觉是(b),但可能有一些我不知道的优化.
谢谢.
更新:
基于对100 x span [src],100 x span [data-src]和100 x span元素进行的快速测试:(a)的速度大约是浏览器的4-8倍.在IE8上,速度要快得多(大约50倍),而在IE6 / 7上,速度差不多.
我想知道的是为什么它速度更快?
在(a)情况下,jquery将整个选择器查询委托给本机querySelectorAll(如果可用).因此,看起来较慢的查询实际上在现代浏览器中非常快.
解决方法:
在http://jsfiddle.net/B9Vmy/1/,我进行了一些测试(将Firebug用于控制台)
对于6000个跨度(2000个跨度,2000带src,2000、2000带data-src),此命令耗时约8ms,因此选择部分可以忽略不计.使它如此缓慢的原因是jQuery对象(jQuery(element))的创建.
虽然A仅对返回的结果执行一次该操作,但是B对每个元素都进行了处理,然后使用这些结果,并对返回的结果再次进行该操作.
然后是可能使用的嘶嘶声引擎来选择元素…看一下筛选器时机:-)