Ich habe gerade ein Video von Nicholas Zakas of Yahoo gesehen, in dem GoogleTalks über die Beschleunigung Ihrer Website spricht. Eines der Dinge, die er erwähnte, war Schleifen in umgekehrter Reihenfolge, um einen von zwei Vergleichen zu überspringen:JS Schleifen und Füllen von Array. Welche ist schneller?
Und er sagte, um JS Bibliotheken Implementierungen von for each
zu vermeiden. Nur zum Spaß dachte ich, ich würde es ausprobieren. Stellt sich heraus, er hat sich geirrt.
var array1 = new Array();
var array2 = new Array();
var start = 0;
var finished = 0;
start = (new Date).getTime();
$("#newDivTest").children().each(function(i){
array1[i] = $(this).get(0).id;
});
finished = (new Date).getTime() - start;
alert(finished);
start = (new Date).getTime();
var len = $("#newDivTest").children().length;
for (i = len; i--;) {
array2[i] = $(this).get(0).id;
}
finished = (new Date).getTime() - start;
alert(finished);
newDivTest hält 1000 leer divs mit einer ID auf "0" ab und zu "999" nach oben. Eine andere Anmerkung ist, dass $(this).get(0).id
ist etwa 3 mal schneller als $(this).attr("id")
aus irgendeinem Grund weiß jemand warum?
Für FF3.5 sind die Ergebnisse "7" und "45", IE7 gibt "30" und "45", Chrome2 gibt "4" und "17", Opera10 gibt "16" und "16" und schließlich gibt Safari4 "4" und "16".
So scheint es der Ansatz, gegen den Nicholas am härtesten ist, ist eigentlich der schnellere in fast allen Fällen.
Ich bin nicht schlau genug zu wissen, was hinter den Kulissen für jQuerys each()
-Methode passiert, aber es muss etwas richtig machen ... richtig?
sollte dies nicht funktionieren, weil in „array2 [i] = $ (dies) .get (0) .id; " Dies ist ein globaler Bereich, kein div. –
Die Existenz dieser Art von Frage ärgert mich kein Ende. Wie rückwärts, dass der Programmierer nach 50 Jahren Compiler-Technologie diese Mikro-Optimierungen noch manuell durchführen muss! –