Vor kurzem habe ich ein wenig mit der Optimierung von Javascript-Code gespielt, um HTML5-Spiele zu erstellen, die speziell auf mobile Browser abzielen. Ich begann mit dem Vergleich von Motoren und vereinfachte die verglichenen Codes nach und nach und ich habe etwas, was ich nicht verstehe.
Der Fall ist mir aufgefallen, dass in Chrome (so denke ich, alle Webkit-basierten Browser) die Änderung der globalen Variablen verursacht die Erhöhung der verwendeten Speicher. Lassen Sie mich Ihnen zwei Beispiele zeigen:
1) Ändern der globalen Variablen:
Code:
%Vor%Bildschirm der Speicherzeitachse:
Wie Sie sehen können, muss in den ersten 10 Sekunden viel Speicher gesammelt werden!
2) Lokale Variable erstellen, anstatt globale Variable zu ändern:
Der Code bleibt derselbe, die einzige Änderung ist das Hinzufügen des Schlüsselwortes "var" innerhalb der Schleife. globalVariable = Math.random (); wird var localVariable = Math.random ();
Bildschirm der Speicherzeitachse:
Wie Sie sehen können, ist die Speicherauslastung sehr niedrig. In den ersten 10 Sekunden erhöht sich die Speicherauslastung nur um 0,1 MB.
Der Unterschied ist wirklich riesig! Ich bin nicht in der Lage, es jetzt zu überprüfen, aber ich wurde informiert, dass in Firefox in beiden Beispielen die Speicherbelegung für beide Fälle fast gleich aussieht.
Kann mir jemand erklären oder auf die Ressourcen zeigen, wo es erklärt wird? Oder kann mir jemand vorschlagen, wie man globale Variable ändert, um den verwendeten Speicher nicht zu erhöhen?
(Zuerst ein kurzer Hinweis auf 'globale' Variablen. Es gibt keine globalen Variablen in Javascript, es gibt Bereiche, einschließlich eines Bereichs auf Fensterebene)
Aber die Antwort ist, dass der Zugriff auf eine Variable von einem anderen scope in einer Funktion in Javascript sie in den aktuellen Bereich hievt. Hier ist eine lustige Erklärung des Effekts.
Tags und Links javascript optimization memory html5 webkit