Beispiel für die JavaScript-Funktion „CollectGarbage“

Beispiel für die JavaScript-Funktion „CollectGarbage“

Sehen wir uns zunächst ein Beispiel für die Speicherfreigabe an:

<SCRIPT LANGUAGE="JavaScript">
<!--
strTest = "1";
für (var i = 0; i < 25; i++)
{
 strTest += strTest;
}
Alarm(strTest);
strTest löschen;
Müll sammeln();
//-->
</SCRIPT>

CollectGarbage ist eine einzigartige Eigenschaft des Internet Explorers, die zum Freigeben von Speicher verwendet wird. Die Verwendung sollte darin bestehen, die Variable oder das Referenzobjekt auf null zu setzen oder zu löschen und es dann freizugeben. Bevor CollectGarbage ausgeführt wird, müssen zwei notwendige Bedingungen erfüllt sein:

- Ein Objekt wird außerhalb des Kontextes, in dem es lebt, ungültig.
- Ein globales Objekt wird ungültig, wenn es nicht verwendet (referenziert) wird.

//---------------------------------------------------------
// Wann wird das JavaScript-Objekt ungültig//---------------------------------------------------------


Funktion testObjekt() {
var _obj1 = neues Objekt();
}

Funktion testObjekt2() {
var _obj2 = neues Objekt();
gibt _obj2 zurück;
}

// Beispiel 1
Testobjekt();

// Beispiel 2
testObjekt2()

// Beispiel 3
var obj3 = testObjekt2();
obj3 = null;

// Beispiel 4
var obj4 = testObjekt2();
var arr = [obj4];
obj3 = null;
arr = [];

In diesen vier Beispielen:

- "Beispiel 1" konstruiert _obj1 in der Funktion testObject(), aber wenn die Funktion beendet wird,
Es hat den Kontext der Funktion verlassen, daher ist _obj1 ungültig;

- In „Beispiel 2“ wird auch ein Objekt _obj2 konstruiert und in testObject2() ausgegeben, so dass das Objekt eine Kontextumgebung (und einen Lebenszyklus) „außerhalb der Funktion“ hat. Da der Rückgabewert der Funktion jedoch nicht von anderen Variablen „gehalten“ wird, wird _obj2 sofort ungültig;

– In „Beispiel 3“ wird _obj2, das von testObject2() erstellt wurde, von der externen Variable obj3 verwendet.
Zu diesem Zeitpunkt wird _obj2 ungültig, da die Referenzbeziehung verschwindet, bis die Codezeile „obj3 = null“ wirksam wird.

– Aus dem gleichen Grund wie in Beispiel 3 wird _obj2 in Beispiel 4 nach der Zeile „arr = []“ ungültig.

Allerdings bedeutet die „Ungültigkeitserklärung“ eines Objekts nicht, dass es „freigegeben“ wird. Innerhalb der JavaScript-Laufzeit gibt es keine Möglichkeit, dem Benutzer genau mitzuteilen, wann ein Objekt freigegeben wird. Dies basiert auf JavaScript
Mechanismus zur Speicherwiederverwendung. ——Diese Strategie ähnelt dem Recyclingmechanismus in .NET.

Im vorherigen Beispielcode für Excel-Operationen kann der Eigentümer des Objekts, d. h. der Prozess „EXCEL.EXE“, erst auftreten, nachdem die „ActiveX-Objektinstanz freigegeben wurde“. Die Dateisperre und die Berechtigungsnachweise des Betriebssystems beziehen sich auf den Vorgang. Wenn das Objekt also nur "ungültig" und nicht "freigegeben" ist,
Dies führt zu Problemen bei anderen Prozessen, die Dateien verarbeiten und auf die Berechtigungsnachweise des Betriebssystems verweisen.

——Manche Leute sagen, dies sei ein Fehler im JavaScript- oder COM-Mechanismus. Eigentlich ist es das nicht. Das liegt am Betriebssystem und am Internet Explorer.
Dies ist eher auf eine komplexe Beziehung zwischen Javascript und JavaScript zurückzuführen als darauf, dass es sich um ein eigenständiges Problem handelt.

Microsoft hat eine Strategie zur Lösung dieses Problems bekannt gegeben: das proaktive Aufrufen des Speicherrecyclingprozesses.

In (Microsofts) JScript wird eine CollectGarbage()-Prozedur (normalerweise als GC-Prozedur bezeichnet) bereitgestellt.
Der GC-Prozess dient zum Bereinigen der „fehlgeschlagenen Objektinstanzen“ im aktuellen IE, also zum Zerstören des aufrufenden Objekts.

Der Code zum Aufrufen des GC-Prozesses im obigen Beispiel lautet:

//---------------------------------------------------------
// Bei der Verarbeitung von ActiveX-Objekten die Standardaufrufmethode des GC-Prozesses //---------------------------------------------------------

Funktion schreibeXLS() {
//(leicht...)

excel.Beenden();
Excel = null;
setTimeout(Garbage Collect, 1);
}

Die erste Codezeile ruft die Methode excel.Quit() auf, um den Excel-Prozess zu beenden und zu verlassen.
Die Umgebung enthält die Excel-Objektinstanz, sodass der Excel-Prozess nicht tatsächlich beendet wird.

Die zweite Codezeile setzt Excel auf Null, um die Objektreferenz zu löschen, wodurch das Objekt „ungültig“ wird. Da sich das Objekt jedoch immer noch im Funktionskontext befindet, wird das Objekt trotzdem nicht bereinigt, wenn der GC-Prozess direkt aufgerufen wird.

Die dritte Codezeile verwendet setTimeout(), um die Funktion CollectGarbage aufzurufen, und das Zeitintervall wird auf „1“ gesetzt, wodurch der GC-Prozess erst nach der Ausführung der Funktion writeXLS() erfolgt. Auf diese Weise erfüllt das Excel-Objekt die Anforderung, "
Für die „GC-Bereinigung“ gibt es zwei Bedingungen: keine Referenzen und Verlassen des Kontexts.

Der Einsatz des GC-Prozesses ist in der JS-Umgebung mit ActiveX-Objekten sehr effektiv. Einige potenzielle ActiveX
Objekte umfassen XML, VML, OWC (Office Web Component), Flash und sogar VBArray in JS.
Aus dieser Sicht wird durch das aktive Aufrufen des GC-Prozesses zum richtigen Zeitpunkt eine bessere Effizienz und ein besseres UI-Erlebnis erzielt, da die Ajax-Architektur XMLHTTP verwendet und gleichzeitig die Eigenschaft „kein Seitenwechsel“ erfüllt.

Tatsächlich lässt sich das oben genannte Excel-Problem auch mit dem GC-Prozess nicht vollständig lösen. Weil der IE auch die Berechtigungsdaten zwischenspeichert. Die Anmeldeinformationen der Seite können nur durch „Wechseln zu einer neuen Seite“ aktualisiert werden.
Daher habe ich im oben erwähnten SPS-Projekt tatsächlich nicht GC als Methode verwendet, sondern den folgenden Code:

//---------------------------------------------------------
//Bei der Verarbeitung von ActiveX-Objekten verwendeter Seitenumschaltcode//---------------------------------------------------------

Funktion writeXLS() {
//(leicht...)

excel.Beenden();
Excel = null;

// Der folgende Code wird verwendet, um einen Fehler im IE-Aufruf von Excel zu beheben; die Methode wird in MSDN bereitgestellt:
// setzeTimeout(Garbage Collect, 1);
// Da der vertrauenswürdige Status der Webseite nicht gelöscht (oder synchronisiert) werden kann, sind Methoden wie SaveAs() beim nächsten Aufruf ungültig.
Standort.neu laden();
}

Der Löschoperator wird im Handbuch beschrieben

Verweise

Entfernt eine Eigenschaft aus einem Objekt oder ein Element aus einem Array.

Ausdruck löschen

Der Ausdrucksparameter ist ein gültiger JScript-Ausdruck, normalerweise ein Eigenschaftsname oder ein Array-Element.

veranschaulichen

Wenn das Ergebnis des Ausdrucks ein Objekt ist und das im Ausdruck angegebene Attribut vorhanden ist, das Objekt jedoch keine Löschung zulässt, wird „false“ zurückgegeben.

In allen anderen Fällen wird „true“ zurückgegeben.

Abschließend noch ein ergänzender Hinweis zu GC: Wenn das IE-Fenster minimiert wird, ruft der IE einmal aktiv die Funktion CollectGarbage() auf. Dadurch wird die Speichernutzung nach der Minimierung des IE-Fensters erheblich verbessert.

Dies ist das Ende dieses Artikels über den detaillierten Fall der JavaScript-Funktion CollectGarbage. Weitere relevante Inhalte zur Funktion CollectGarbage von js finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung dieser Zeigerfunktion in JS
  • Erläuterung der JavaScript-Funktionssyntax
  • Detaillierte Erklärung zur Verwendung der Vue.js-Renderfunktion
  • JavaScript-Grundlagenreihe: Funktionen und Methoden
  • Fallstudie zu JavaScript-Funktionsaufrufen, Apply- und Bind-Methoden
  • Detaillierte Erläuterung der Einführung in die JavaScript-Funktion

<<:  Diagramm des Tutorials zur schnellen Installation und Konfiguration des Linux-Systems MySQL8.0.19

>>:  Detaillierte Schritte und Methoden zur Problemlösung zur Installation von MySQL 8.0.19 unter Linux

Artikel empfehlen

Docker-Fallanalyse: Erstellen eines MySQL-Datenbankdienstes

Inhaltsverzeichnis 1 Konfigurations- und Datenver...

So beschränken Sie das Eingabefeld in HTML auf die Eingabe reiner Zahlen

Beschränken Sie input Eingabefeld auf reine Zahle...

Eine kurze Analyse von MySQL-Sperren und -Transaktionen

MySQL selbst wurde auf Basis des Dateisystems ent...

Typische Fälle von MySQL-Indexfehlern

Inhaltsverzeichnis Typische Fälle Anhang: Häufige...

Ausführliche Erläuterung der InnoDB-Sperren in der MySQL-Technologie

Inhaltsverzeichnis Vorwort 1. Was ist ein Schloss...

Eine kurze Analyse der Probleme mit JS-Originalwerten und Referenzwerten

Primitive Werte -> primitive Typen Number Stri...

Eine einfache und eingehende Studie zu Async und Await in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Detaillierte ...

Spezifische Schritte für den Vue-Browser zur Rückgabe der Überwachung

Vorwort Beim Teilen einer Seite hoffen Sie, durch...

So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen

Mit zunehmender Anzahl von Besuchen steigt der Dr...

Detaillierte Erklärung der Rolle von Explain in MySQL

1. MySQL-Index Index: Eine Datenstruktur, die MyS...