一个客户想要一个单词拆分,并在网页中选择两种颜色。很简单,这是的功能
jQuery('body').each(function() {
var text = jQuery(this).html();
$(this).html(text.replace(/highlightedtext/g, '<span class="highlight">highlighted<span>text</span></span>'));
});
我的问题是,我该如何评估它的速度(这看起来像是一把大锤砸在坚果上(?我一开始只寻址.content
div,但他们开始在其他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开发工具(或浏览器中的等效工具(上的"性能"选项卡来评估回流的影响和脚本成本