当我在调优性能时在JQuery密集页面上运行探查器时,我注意到这些JQuery函数需要花费大量时间(按此顺序)
dir (9.42%)
Sizzle (3.79%)
filter (3.79%)
我的jquery函数太大而无法在此处粘贴。我可以获得有关哪些JQuery函数在内部调用这些函数的指针吗?
另外,有没有办法使用IE8探查器(或任何其他方式)获取JS函数树,告诉我哪个JS函数调用哪一个?
由于
答案 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_NODE
。 dir()
函数过滤器(或称为“清理”)是给定查询的结果集,以确保只返回DOM元素,而不是属性,文本节点等。 (天气dir()
被执行,很可能是由Sizzle决定的)。
总结:
你不能跳过任何这些功能,因为它们是实际能够掌握DOM中任何东西的核心。 (做一个查询)。
每次查询DOM($("#something")
)时,这些函数都会被执行。在简单查询中,可能只会执行三个函数中的一个或两个。这可能是呼叫次数变化的原因。
正如Chetan Sastry所指出的:您可以获得大量性能缓存查询等等。看看this post的一些简洁的jQuery技巧。