当前位置:  开发笔记 > 编程语言 > 正文

改善jQuery选择器性能的好方法?

如何解决《改善jQuery选择器性能的好方法?》经验,为你挑选了4个好方法。

我正在寻找任何可以改善jQuery调用的选择器性能的方法.特别是这样的事情:

$("div.myclass")不是快$(".myclass")

我认为它可能是,但我不知道jQuery是否足够聪明,首先限制标签名称的搜索等等.任何人对如何制定jQuery选择器字符串以获得最佳性能有任何想法?



1> kamens..:

毫无疑问,首先按标签名称过滤要比按类过滤快得多.

在所有浏览器本地实现getElementsByClassName之前都会出现这种情况,就像getElementsByTagName的情况一样.



2> Matthew Crum..:

在某些情况下,您可以通过限制其上下文来加速查询.如果您有元素引用,则可以将其作为第二个参数传递以限制查询的范围:

$(".myclass", a_DOM_element);

应该比快

$(".myclass");

如果你已经有一个_DOM_element并且它明显小于整个文档.


我记得`$('.myclass',a_DOM_element)`jQuery转换为/调用`$(a_DOM_element).find('.myclass')`所以它*可能*稍微快一点,只需使用[`find() `](http://api.jquery.com/find/),而不是像第一个例子中那样建立[selector context](http://api.jquery.com/jquery/#selector-context).

3> Dmitri Farko..:

为了充分理解更快的内容,您必须了解CSS解析器的工作原理.

您传入的选择器使用RegExp拆分为可识别的部分,然后逐个处理.

一些选择器如ID和TagName,使用浏览器的本机实现更快.虽然其他类似的类和属性是分开编程的,因此速度要慢得多,需要循环选择元素并检查每个类名.

所以是的回答你的问题:

$('tag.class')比$('.class')更快.为什么?在第一种情况下,jQuery使用本机浏览器实现将选择过滤到您需要的元素.只有这样它才会启动较慢的.class实现过滤到您要求的内容.

在第二种情况下,jQuery使用它的方法通过抓取类来过滤每个元素.

由于所有javascript库都基于此,因此这比jQuery进一步传播.唯一的另一个选择是使用xPath,但目前在所有浏览器中都没有得到很好的支持.



4> 小智..:

正如Reid所说,jQuery是自下而上的.虽然

这意味着$('#foo bar div')慢很多$('bar div #foo')

这不是重点.如果你有,#foo你不会在选择器中放任何东西,因为ID必须是唯一的.

重点是:

如果你从带有ID的元素中选择任何东西,那么先选择后面的,然后再使用.find,.children等等:$('#foo').find('div')

您最左边(第一)选择的部分可以是效率较低缩放到最右边(最后)的一部分应该是最有效的-这意味着,如果你没有一个ID确保你正在寻找$('div.common[slow*=Search] input.rare'),而不是$('div.rare input.common[name*=slowSearch]')-因为这ISN" t始终适用确保通过相应的分割强制选择器顺序.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有