JQuery目录,sizzle和过滤器

时间:2009-09-09 18:39:32

标签: jquery

当我在调优性能时在JQuery密集页面上运行探查器时,我注意到这些JQuery函数需要花费大量时间(按此顺序)

dir (9.42%)
Sizzle (3.79%)
filter (3.79%)

我的jquery函数太大而无法在此处粘贴。我可以获得有关哪些JQuery函数在内部调用这些函数的指针吗?

另外,有没有办法使用IE8探查器(或任何其他方式)获取JS函数树,告诉我哪个JS函数调用哪一个?

由于

1 个答案:

答案 0 :(得分:2)

jQuery的大多数内部都是私有的匿名函数。我不知道你怎么能描述这个。 (我也试过,没有运气)。

Sizzle是selector-engine强大的jQuery。我怀疑Sizzle在使用更复杂的选择器查询DOM时会使用filter()

因此,至少那些函数调用是“正常”并按预期工作,并且尽可能快速地进行优化。


更新

这是dir()函数的实现:

jQuery.dir = function( elem, dir ){
    var matched = [], cur = elem[dir];
    while ( cur && cur != document ) {
        if ( cur.nodeType == 1 )
            matched.push( cur );
        cur = cur[dir];
    }
    return matched;
};

nodeType 1是ELEMENT_NODEdir()函数过滤器(或称为“清理”)是给定查询的结果集,以确保只返回DOM元素,而不是属性,文本节点等。 (天气dir()被执行,很可能是由Sizzle决定的)。


总结:

你不能跳过任何这些功能,因为它们是实际能够掌握DOM中任何东西的核心。 (做一个查询)。


每次查询DOM($("#something"))时,这些函数都会被执行。在简单查询中,可能只会执行三个函数中的一个或两个。这可能是呼叫次数变化的原因。


正如Chetan Sastry所指出的:您可以获得大量性能缓存查询等等。看看this post的一些简洁的jQuery技巧。