Mam framework, który generuje DOM aplikacji całkowicie przy użyciu document.createElement
i document.appendChild
. Teraz, gdy aplikacja staje się coraz większa, zauważyłem, że Chrome potrzebuje znacznie dłużej, aby zbudować DOM jako inne przeglądarki.Czy chromes "appendChild" jest naprawdę wolny?
Więc stworzyłem następujący test wydajności:
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);
}
Wyniki tego badania są bardzo ciekawe:
- Chrome 16: 700+
- Firefox 9: 560
- IE 9: 210
- Opera 11.60: 51
Chrome zajęło ponad 14 razy więcej czasu niż Opera. I to nie jest tylko bezsensowny punkt odniesienia! Naprawdę czuję tę różnicę w mojej aplikacji.
Czy to normalne, że Chrome działa tak wolno w operacjach DOM? Czy istnieje sposób na przyspieszenie?
Dzięki!
'setTimeout' wydaje się prawdopodobne, aby zrzucić swój czas. – Domenic
Możesz wstawić elementy div jednocześnie, a nie jeden po drugim. –
@Domenic potrzebujesz setTimeout w tego rodzaju benchmarku, aby przeglądarka faktycznie działała zanim dostaniesz czas – Esailija