【发布时间】:2013-11-15 22:14:28
【问题描述】:
我仅使用 DOM 在浏览器中构建了 Conway 的生命游戏。没什么特别的,以前做过。我的目标是尽我所能优化它。我实际的生命游戏代码运行良好,而且速度快到我喜欢的程度。瓶颈出现在更新屏幕状态。屏幕上有数十万或数百万个 DOM 元素,您可以想象这可能会很慢(尽管比我最初想象的要快)。我的问题是:
一次在屏幕上处理超过一百万个 DOM 元素,遍历 DOM 元素列表并单独更改其样式的最快方法是什么?
我正在使用一个类来跟踪样式,动态更改它们的style 而不是class 会更好吗?我将所有这些元素保存在一个多维数组中,通过另一种方式迭代会更好(循环本身不是瓶颈,我的代码中有很多这样的循环对我来说运行得足够快)?我对“重排”或元素更改时浏览器如何呈现事物一无所知。能否以提高性能的方式利用这些想法?
这是我当前的代码:
var updateUI = function () {
for (var i = 0; i < width; i++) {
var row = grid[i];
var rowUI = gridUI[i];
for (var j = 0; j < height; j++) {
rowUI[j].className = "b" + row[j];
}
}
}
类风格为:
.b1 {
background: #000;
}
【问题讨论】:
-
DOM 不擅长这种事情。我尖刻的回答是:不要,改用画布。
-
我明白这一点,并且知道这一点进入了这个项目:)我希望至少有一个“使用画布”评论。
-
在 jsperf.com 中设置比较测试来评估
-
干得好@MattDiamant!
标签: javascript jquery html css performance