Таким образом вы создаете слишком много событий перекомпоновки / макета. Так как вы удаляете все элементы, а затем добавляете их снова (и то, и другое дорого), вместо этого просто добавьте все элементы div один раз, и, поскольку они всегда в том же порядке, просто обновите существующие.
Также, чтобы быстро очистить div, выполните div.innerHTML = '';
. Если вы добавляете много элементов, добавьте их в фиктивный div и затем присоедините фиктивный div к div, фактически подключенному к DOM (например, к тому, который вы можете запросить с помощью функций document.getElement ???).
В init:
div = document.getElementById('mainView');
for (y = this.y; y < this.y + this.height; ++y)
{
for (x = this.x; x < this.x + this.width; ++x)
{
toAppend = document.createElement('div');
viewCoords = this.convertWorldToView(x, y);
toAppend.style.top = viewCoords[1] * 16 + 'px';
toAppend.style.left = viewCoords[0] * 16 + 'px';
mainViewDiv.appendChild(toAppend);
}
}
В рендере:
div = document.getElementById('mainView');
var i = 0;
for (y = this.y; y < this.y + this.height; ++y)
{
for (x = this.x; x < this.x + this.width; ++x)
{
toAppend = div.children[i++];
if (fullMap[y][x] == TILE_WATER)
{
startTile = Math.round(Math.random() * 3) + 1;
toAppend.className = "Water" + startTile + "Tile";
}
else
{
toAppend.className = typeClassDecoder[fullMap[y][x]];
}
}
}