在调优性能时,当我在JQuery密集型页面上运行分析器时,我注意到这些JQuery函数需要大量的时间(按照这个顺序)
dir (9.42%)
Sizzle (3.79%)
filter (3.79%)
我的jquery函数太大了,不能粘贴到这里。我能得到哪些JQuery函数在内部调用这些函数的指针吗?
另外,有没有办法使用IE8分析器(或任何其他方式)获取JS函数树,告诉我哪个JS函数调用了哪个JS函数?
谢谢
发布于 2009-09-09 18:45:57
jQuery的大部分内部都是私有的匿名函数。我不明白你怎么能分析这个。(我也试过了,但没有成功)。
Sizzle是支持jQuery的selector-engine。我怀疑Sizzle在查询DOM时使用了大量的filter(),使用了更复杂的选择器。
因此,至少这些函数调用是"ok“的,并按预期工作,并且在速度方面尽可能优化。
更新:
下面是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元素,而不返回属性、文本节点等。(Weather dir()
被执行,很可能是由Sizzle决定的)。
总结:
您不能跳过这些函数中的任何一个,因为它们是能够实际获得DOM中的任何内容的核心。(进行查询)。
每次查询DOM ( $("#something")
)时,都会执行这些函数。对于简单的查询,可能只会执行三个函数中的一个或两个。这可能就是为什么调用次数会有变化的原因。
正如Chetan Sastry所指出的:缓存查询等可以获得很高的性能。看看this post中一些简洁的jQuery技巧吧。
https://stackoverflow.com/questions/1401339
复制相似问题