Heim  >  Artikel  >  Web-Frontend  >  Implementieren Sie eine leistungsstarke Datenspeicherung in JavaScript

Implementieren Sie eine leistungsstarke Datenspeicherung in JavaScript

黄舟
黄舟Original
2017-02-20 14:29:021170Durchsuche

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.

f35d6e602fd7d0f0edfa6f7d103c1b57mit 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.

2cc198a1d5eb0d3eb508d858c9f5cbdbtry-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).

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn