使用jQuery遍历和替换DOM的效率



一个客户想要一个单词拆分,并在网页中选择两种颜色。很简单,这是的功能

jQuery('body').each(function() {
var text = jQuery(this).html();
$(this).html(text.replace(/highlightedtext/g, '<span class="highlight">highlighted<span>text</span></span>'));
});

我的问题是,我该如何评估它的速度(这看起来像是一把大锤砸在坚果上(?我一开始只寻址.contentdiv,但他们开始在其他CMS管理的内容中偷偷使用这个短语,所以我考虑用jQuery('body')遍历整个文档,但我有点担心性能会受到影响。

使用jQuery('body')的效率是否明显低于jQuery('.content, .other-div, .etc')

在您的代码中,jQuery仅用于查找标记,繁重的工作由正则表达式完成。您可以删除jQuery并将其替换为:

document.body.innerHTML.replace(/highlightedtext/g, '...')

IMO,此代码中的瓶颈是DOM回流,即重新计算DOM中所有元素的位置。有关的详细信息,请参阅此处

此外,使用jQuery("p,span,div,whatever"(更精确地用文本识别元素只会增加DOM遍历的开销,而对最小化回流几乎没有好处。

您可以使用Chrome开发工具(或浏览器中的等效工具(上的"性能"选项卡来评估回流的影响和脚本成本

最新更新