Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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选择器引擎(sizzle)内部实现的信息_Javascript_Jquery_Sizzle - Fatal编程技术网

Javascript 查找有关jQuery选择器引擎(sizzle)内部实现的信息

Javascript 查找有关jQuery选择器引擎(sizzle)内部实现的信息,javascript,jquery,sizzle,Javascript,Jquery,Sizzle,我正在寻找有关Sizzle(jQuery)在对其运行选择器时在内部做什么的信息。理想情况下,要么是写了一篇关于不同浏览器如何处理的文章或博客,要么是一个可以为不同浏览器反编译选择器的站点。具体来说,我有一个团队说,我编写的代码将IE7锁定在非常大的数据集上: .find('.row:not(.row-0) .col-' + colN + ':not(.forbid-transfer)') 将其更改为: .find('.row:not(.row-0) .col-' + colN).filter(

我正在寻找有关Sizzle(jQuery)在对其运行选择器时在内部做什么的信息。理想情况下,要么是写了一篇关于不同浏览器如何处理的文章或博客,要么是一个可以为不同浏览器反编译选择器的站点。具体来说,我有一个团队说,我编写的代码将IE7锁定在非常大的数据集上:

.find('.row:not(.row-0) .col-' + colN + ':not(.forbid-transfer)')
将其更改为:

.find('.row:not(.row-0) .col-' + colN).filter(':not(.forbid-transfer)')
修复了速度问题

对我来说,这是一个完整的wtf,因为我假设这两个在引擎中是相同的,但显然不是。请注意,父容器中的所有内容都是div,因此将其更改为
div.row。。。div.col…
不应该加快任何速度。

我敢打赌

.find('.row:not(.row-0)').find('.col-' + colN).filter(':not(.forbid-transfer)')

在IE7中会更快,也许在支持“querySelectorAll()”的浏览器中不会。即便如此,这也取决于页面的细节

不相关,但我建议使用
.not()
而不是
过滤器(“:not()”
),如果您发现性能没有差异,“我有一个团队说,我编写的代码在非常大的数据集上锁定了IE7”步骤1:单独复制。我得承认我很难相信。如果不是选择器中较早的
:not
,我会相信在某些浏览器上,因为如果不使用任何特殊的伪类,Sizzle将遵从
querySelectorAll
。但是IE7没有
querySelectorAll
,而且您在其他地方使用
:not
,因此…主要区别在于,在第一种情况下,浏览器将比在第二种情况下对更多的元素进行双类名测试,因为(我认为)它是从右到左工作的。因此,在检查元素是否具有正确的“行”父级之前,它同时检查“.col-n”类和“禁止传输”类。在第二种情况下,在候选人名单被剔除之前,它不必担心“禁止调动”。@t.J.Crowder-我很想复制它,但我与一个顽固的团队合作,他们不允许我们访问他们的服务器:/@Pointy-是有意义的,但我不明白为什么在这种情况下会有显著的不同。第一个过滤器,
.row:not(.row-0)
仅排除~10
.col
divs(一行中的数字)。