1. Es gibt vier grundlegende Datenzugriffsorte in JavaScript: Literale, lokale Variablen, Array-Elemente und Objektmitglieder.
Im Allgemeinen: [Literal, lokale Variable] Laufgeschwindigkeit>[Array, Objektmitglied]
2. Interne Eigenschaften enthalten den Wert einer erstellten Funktion Objekte im Geltungsbereich. Diese Menge wird als Bereichskette bezeichnet.
3. Führen Sie die Funktion aus -> Erstellen Sie ein aktives Objekt (d. h. ein Funktionslaufzeitvariablenobjekt).
Der mehrmalige Aufruf derselben Funktion führt also zur Erstellung mehrerer Ausführungsumgebungen.
4. Funktionsausführungsprozess
Jedes Mal, wenn eine Variable angetroffen wird, durchläuft sie einen Bezeichnerauflösungsprozess, bei dem Daten abgerufen oder gespeichert werden. Dieser Prozess durchsucht die Bereichskette der Ausführungsumgebung. Es ist dieser Suchvorgang, der sich auf die Leistung auswirkt.
5. Leistung der Identifikatoranalyse
Globale Variablen sind immer am Ende des Ausführungsumgebungsbereichs vorhanden. Lokale Variablen werden zuerst aufgelöst.
Faustregel: Wenn in einer Funktion mehr als einmal auf einen bereichsübergreifenden Wert verwiesen wird, speichern Sie ihn in einer lokalen Variablen.
Zum Beispiel:
function initUI(){ var bd=document.body; //后面有多次doucument这个全局对象的调用 } //->优化后 function initUI(){ var doc=document; bd=doc.body; //把doucument这个全局对象的引用存储到局部变量doc中 }
6. Ändern Sie die Bereichskette
Im Allgemeinen , ändert sich die Bereichskette einer Ausführungsumgebung nicht.
<1>mit kann die Bereichskette vorübergehend ändern
width wird verwendet, um eine Variable für alle Eigenschaften des Objekts zu erstellen
function initUI(){ with(document){ var bd=body; } }
Wenn der Code mit ausgeführt wird, wird die Bereichskette der Ausführungsumgebung vorübergehend geändert. Es wird ein neues Variablenobjekt erstellt, das alle Eigenschaften des durch den Parameter angegebenen Objekts enthält. Dieses Objekt wird an die erste Position der Bereichskette verschoben, sodass sich zu diesem Zeitpunkt alle lokalen Variablen im zweiten Bereichskettenobjekt befinden, sodass die Zugriffskosten höher sind.
<2>try-catch
Wenn in der try-Anweisung ein Fehler auftritt, springt der Ausführungsprozess automatisch zum Catch. Drücken Sie dann das Ausnahmeobjekt in ein Variablenobjekt und platzieren Sie es oben im Bereich.
Hinweis: Sobald die Catch-Unteranweisung ausgeführt wird, kehrt die Bereichskette in den vorherigen Zustand zurück.
7. Durch Schließungen verursachte Leistungsprobleme
Abschlüsse sind eine der mächtigsten Funktionen von JavaScript.
Da der Abschluss einen Verweis auf dasselbe Objekt enthält, das die Bereichskette der Umgebung ausführt, wird das aktive Objekt der Funktion nicht zerstört, was zu mehr Speicheraufwand führt.
Leistungsprobleme: Wenn häufig auf bereichsübergreifende Bezeichner zugegriffen wird, führt jeder Zugriff zu Leistungseinbußen.
Start:19:41:45 2015-11-21 Zitiert aus von Aaron: /content/3493261.html
8. Speicherverlust
Speicherverlust bedeutet, dass ein Teil des zugewiesenen Speichers nicht verwendet oder recycelt werden kann, bis der Browserprozess beendet ist. Da der Speicher in C++ manuell verwaltet wird, kommt es häufig zu Speicherlecks. Heutzutage verwenden beliebte Sprachen wie C# und Java automatische Garbage-Collection-Methoden zur Speicherverwaltung, und bei normaler Verwendung treten fast keine Speicherverluste auf. Browser verwenden auch die automatische Speicherbereinigung, um den Speicher zu verwalten. Aufgrund von Fehlern in der Speicherbereinigungsmethode des Browsers kann es jedoch zu Speicherlecks kommen.
Mehrere Fälle von Speicherlecks
Zirkelverweise
Javascript-Abschlüsse
DOM-Einfügereihenfolge
Wenn a Wenn ein DOM-Objekt von einem Javascript-Objekt referenziert wird und gleichzeitig auf dasselbe oder ein anderes Javascript-Objekt verweist, kann das DOM-Objekt einen Speicherverlust verursachen. Der Verweis auf dieses DOM-Objekt wird vom Garbage Collector nicht zurückgefordert, wenn das Skript beendet wird. Um einen Referenzzyklus zu unterbrechen, muss dem Objekt, das auf das DOM-Element verweist, oder einem Verweis auf das DOM-Objekt null zugewiesen werden.
Die Einzelheiten werden ausführlich besprochen, hier ist die Zusammenfassung
JS-Speicherlecks, kein Wunder, dass die Elemente aus dem DOM entfernt werden, aber es gibt immer noch Variablen oder Objekte Referenzen Das DOM-Objekt. Dann kann es nicht aus dem Speicher gelöscht werden. Dadurch bleibt die Speichernutzung des Browsers hoch. Diese Speichernutzung wird automatisch freigegeben, wenn der Browser aktualisiert wird.
Eine andere Situation sind Zirkelverweise. Dies führt zu einer ernsteren Situation. Selbst wenn sie aktualisiert werden, wird der Speicher nicht reduziert. Im engeren Sinne handelt es sich hierbei um ein Speicherleck.
Das Obige ist der Inhalt der Implementierung einer Hochleistungsdatenspeicherung in JavaScript. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).