这是一段简单的 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(特定于 IE)的 HTML。我知道 jquery 不能正确支持命名空间,但我发现这是在 jQuery 中搜索 HTML 命名空间之外的节点的最佳方法。
令我困惑的是,尽管我知道 find("") 的性能并不好,但我不明白当文档查找 2000 个节点时如何花费如此大量的时间.find() 瞬间找到10000个节点
最佳答案
看起来 Firefox 遍历 dom 并返回节点的例程性能不是很好。看起来这不可能是 jQueries 的错误,因为其他浏览器似乎可以更好地处理它。
关于jquery - Firefox 中 jquery find 的严重性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115341/