为什么用 InnerText 替换 InnerHTML 会导致性能下降 >15 倍
why does replacing InnerHTML with innerText causes >15X drop in performance
这个问题源于我之前的帖子,为什么 DOM 读/写操作的微小重新排序会导致巨大的性能差异。
请考虑以下代码:
function clearHTML(divs) {
Array.prototype.forEach.call(divs, function (div) {
contents.push(div.innerHTML);
div.innerHTML = "";
});
}
function clearText(divs) {
Array.prototype.forEach.call(divs, function (div) {
contents.push(div.innerText); //innerText in place of innerHTML
div.innerHTML = "";
});
}
http://jsfiddle.net/pindexis/ZZrYK/
我的测试结果为 n=100:
清除网页: ~1ms
明文:~15ms
对于 n=1000:
清除HTML : ~4ms
明文:~1000ms
我在谷歌浏览器和IE上测试了代码,得到了类似的结果(Firefox不支持innerText(。
编辑:与innerHTML相比,这两个函数之间的差异不是由innerText函数的缓慢引起的,这是肯定的(我尝试删除div.innerHTML =""
并提高了性能(,这里有奇怪的浏览器回流发生。
正如 MDN 解释的那样:
由于innerText知道CSS样式,它将触发重排,而textContent不会。
使用textContent
而不是innerText
不会导致回流,而且速度也很快。 IE9+也支持FFX/Chrome。
几乎可以肯定,区别来自于获取 InnerText 所需的额外努力(我相信它删除了多余的标签并只返回元素中的文本(。另一方面,InnerHTML只是返回已经被浏览器解析和理解的数据。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 在javascript中搜索项目列表的性能
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- JavaScript数组优化以提高性能
- React+Redux性能优化与组件ShouldUpdate
- 在循环中附加事件处理程序时出现浏览器性能问题
- JavaScript-===vs===运算符性能
- 超时功能的性能
- Pg承诺性能提升:在冲突中
- immutable.js与嵌套映射/对象的比较/相等性能
- NodeJ中的注释会影响性能吗
- 如果条件为循环-性能差异
- <脚本类型=“;模块“>负载性能
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 错误编码的Adsense广告正在扼杀我的网站's的性能
- 为什么用 InnerText 替换 InnerHTML 会导致性能下降 >15 倍