在Firefox中使用jquery查找严重的性能问题

时间:2011-02-25 08:59:46

标签: jquery performance firefox

这是一个简单的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个节点

2 个答案:

答案 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。