【发布时间】:2012-02-13 08:47:25
【问题描述】:
我有一个完全使用document.createElement 和document.appendChild 生成应用程序DOM 的框架。现在应用程序变得越来越大,我注意到 Chrome 与其他浏览器一样需要更长的时间来构建 DOM。
所以,我创建了以下性能测试:
window.onload = function(){
var now = new Date().getTime();
for(var i = 0; i < 10000; i++){
document.body.appendChild(document.createElement("div"));
}
setTimeout(function(){
console.log(new Date().getTime() - now);
},0);
}
这个测试的结果很有意思:
- 铬 16:700+
- 火狐9:560
- IE 9:210
- Opera 11.60: 51
Chrome 的完成时间是 Opera 的 14 倍多。 这不仅仅是一个毫无意义的基准!我真的可以在我的应用中感受到这种不同。
Chrome 在 DOM 操作上这么慢是正常的吗? 有没有办法加快速度?
谢谢!
【问题讨论】:
-
setTimeout似乎会耽误你的时间。 -
@Domenic 你需要 setTimeout 在这种基准测试中,以便浏览器在你得到时间之前确实可以工作
-
@Esailija 不正确,正如我的性能测试所示,它让你失望:jsperf.com/appendchild-from-so 回想一下,
setTimeout在不同的浏览器中被限制为不同的值。 -
@Domenic jsperf 有什么相关性?无论如何:jsfiddle.net/rZzYk/2
-
@Domenic 但它返回正确的结果,您至少可以使用时间线工具在 chrome 中验证。根据时间轴,渲染耗时 3.04 秒,但第一个记录的数字是 600 毫秒。那是因为浏览器仅在记录该时间后才呈现。如果您将日志记录推迟到线程空闲后立即进行(即
setTimeout( , 0),您将获得渲染完成后的时间。
标签: javascript performance dom google-chrome