我目前正在编写关于webperformance的单一解释,并且发现了一些我没想到的结果。
正如Paul Irish或jquery本身所建议的那样,总是最好从身份下降。
http://learn.jquery.com/performance/optimize-selectors/
所以我原以为$('。class')应该慢于$('#id class')或$('#id')。find('。class')。
我在jsperf上测试了它并得出了一个非常有趣的结果:
Results http://fs1.directupload.net/images/141230/5euuefin.png
这似乎真的取决于浏览器,但我真的没想到$('。class')表现得如此之好,特别是在Chrome上它比那些从id下降的人更快。
对我来说有意义的是以下解释,但为什么这些浏览器的差异如此之大。发动机是如此不同?
不同之处在于使用单个类或id查找时,可以使用getElementsByClassName和getElementById,这比querySelector快。在现代浏览器中,你会发现它快了10倍。
来源:http://jsperf.com/jquery-class-vs-tag-qualfied-class-selector/38
那你对此有什么看法?
答案 0 :(得分:1)
回答你问题中唯一真实的问题:“对我来说有意义的是以下解释,但为什么这些浏览器的差异如此之大。引擎是如此不同?”
答案当然是“是”。这三种浏览器都源于不同的代码库,不同的编码方法将导致速度差异显着不同。例如“向3位编码人员询问解决方案,你将得到3种不同的解决方案”:)
最值得注意的是,类搜索在现代浏览器上实际上非常快,尽管有相反的建议。添加其他检查(甚至ID选择器)只会减慢类搜索速度。这意味着大多数(如果不是全部)现代浏览器都会保留类与元素的缓存。这可能是为了加快CSS处理速度,但副作用也是基于类的快速搜索。