【发布时间】:2011-02-25 08:59:45
【问题描述】:
这是一段简单的 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个节点
【问题讨论】:
-
你能告诉我 "v\\:group" 究竟选择了什么吗?
-
在任何情况下我都会避免使用
find("*")。如果您确实需要到达所有后代节点,那么“手动”遍历树会更明智。 -
v:\\group 不是和 VML 有关系吗?
-
@meo:它将选择名称为
v:group的所有笔记 - 这不是有效的 HTML,但它是一个完全有效的 XML 标记名称。 -
@RoToRa:由于操作从
document查找后代,因此它是 HTML,因此无论如何都是无效的。
标签: jquery performance firefox