Ich entwickle an einem Spiel namens overwatch http://overwatch.de .
Dieses Spiel besteht aus einer Kartenansicht, in der alle Aktionen gemacht werden. Diese Kartenansicht beinhaltet viele DIVs, die hin und hergeschoben und vor allem erstellt werden müssen. Besonders das Umsetzen des sichtbaren Kartenausschnitts erfordert das komplette Neurendern der Elemente.
Ein sehr interessanter Artiken zum Thema Performance ist hierbei: "Benchmark - W3C DOM vs. innerHTML".
Nun erstelle und füge ich meine HTML Elemente mit der dort empfohlenen Methode ein. Ein PerformanceUnterschied wie Tag und Nacht (nie gemessen, rein subjetives Empfinden).
Davor: Prototype und Scriptaculous werden verwendet: var element = Builder.node(...); $('parentelementId').appendChild(element); .. das ganze mehrere hunter mal zwingt normale Rechner langsam in die Knie. Ganz beonders langsam wird es dann, wenn auf all diesen Elementen auchnoch Evenhandler angemeldet werden Event.observe( element, 'click', doSomething );
Jetzt: var elementArray = new Array(); myDataArray.each( function(date){ elementArray.push( createElement(data) );} ); $('targetElementId').innerHTML = elementArray.join('');
Wobei createElement auch gleich für Eventhandling das onclick Attribut setzt.
Eine Sache gibt es jedoch, auf die geachtet werden muss: Nachträglich etwas an das innerHTML anzuhängen ist (besonders bei vielen bestehenden Elementen im innerHTML) sehr unperformant, da Browserseitig alle DOM Elemente gelöscht und neu erstellt werden müssen. Daher hänge ich nachträglich einzelne Elemente wieder per appendChild an.
Wollt mal wieder was schreiben...
Maxx