这是一个简单的jQuery代码:
alert($(document).find("*").length);
alert($(document).find("v\\:group").length);
alert($(document).find("v\\:group").find("*").length);
在非firefox浏览器中,所有3个步骤都会立即返回;在Firefox 3.6第三步似乎永远(我让它在100%CPU运行超过一分钟,它没有完成)。我正在使用最新的jQuery(1.5.1),但在1.4.2中有相同的结果。
返回的计数是10000,50和2000,因此您可以看到虽然文档大小不是很小,但它不应该大到足以表现出类似的重大性能问题。
在回复之前的帖子时,我只想澄清一点:文档是包含一些嵌入式VML的HTML(特定于IE)。我知道jquery不能正确支持命名空间,但我收集到这是在jQuery中搜索HTML命名空间之外的节点的最佳方法。
我感到困惑的是,即使我理解find(“”)的性能不是很好,我也看不出在文档中如何花费如此大的时间来查找2000个节点.find()即时找到10000个节点
答案 0 :(得分:0)
看起来像浏览dom并返回节点的Firefox例程性能不是很高。 semms就像它不能是jQueries错误,导致其他浏览器似乎更好地处理它。
答案 1 :(得分:0)
好的,我到底了。原来jQuery是无辜的;它是因为firefox以不同的方式解析HTML。看来如果你有一些" HTML"像这样的来源:
<v:group />
<v:group />
<v:group />
Firefox像这样构建DOM:
<v:group>
<v:group>
<v:group />
</v:group>
</v:group>
所以$(document).find("v\\:group").find("*")
从O(n)变为O(n ^ 2),因此我的文档中有数千个<v:group>
的性能差异很大。
我希望firefox能像其他浏览器一样解析它,但我不会把它称为bug,因为我不认为这是有效的HTML。