1. EinleitungTraditionell erstellen Entwickler Eigenschaften in JavaScript-Klassen für alle Daten, die in einer Instanz benötigt werden könnten. Bei kleinen Datenmengen, die im Konstruktor leicht verfügbar sind, ist dies kein Problem. Wenn Sie jedoch einige Daten berechnen müssen, bevor sie in der Instanz verfügbar sind, möchten Sie diese Gebühr möglicherweise nicht im Voraus bezahlen. Betrachten Sie beispielsweise diese Klasse: Klasse MeineKlasse { Konstruktor() { this.data = eine teure Berechnung(); } } Hier wird 2. On-Demand-AttributmodusDie einfachste Möglichkeit, die Ausführung einer aufwändigen Operation zu optimieren, besteht darin, mit der Berechnung zu warten, bis die Daten benötigt werden. Sie können beispielsweise eine Accessor-Eigenschaft mit einem Getter verwenden, um die Berechnung bei Bedarf wie folgt durchzuführen: Klasse MeineKlasse { Daten abrufen() { returniere eine teure Berechnung(); } } In diesem Fall wird Ihre aufwändige Berechnung erst durchgeführt, wenn jemand dieses 3. Unordentliches Lazy-Loading-AttributmusterEin guter Anfang ist, Berechnungen nur durchzuführen, wenn auf eine Eigenschaft zugegriffen wird. Was Sie wirklich wollen, ist, die Informationen nach diesem Punkt zwischenzuspeichern und nur die zwischengespeicherte Version zu verwenden. Aber wo speichern Sie diese Informationen zwischen, um leicht darauf zugreifen zu können? Der einfachste Weg hierfür besteht darin, eine gleichnamige Eigenschaft zu definieren und ihren Wert auf die berechneten Daten festzulegen, und zwar wie folgt: Klasse MeineKlasse { Daten abrufen() { const actualData = einigeExpensiveComputation(); Objekt.defineProperty(diese, "Daten", { Wert: tatsächlicheDaten, beschreibbar: false, konfigurierbar: false, aufzählbar: falsch }); tatsächliche Daten zurückgeben; } } Hier wird die const-Objekt = neue MyClass(); // ruft den Getter auf const data1 = Objekt.Daten; // liest aus der Dateneigenschaft const data2 = Objekt.Daten; Tatsächlich werden alle Berechnungen nur beim ersten Lesen Ein Nachteil dieses Musters besteht darin, dass const-Objekt = neue MyClass(); console.log(object.hasOwnProperty("data")); // falsch const data = Objekt.data; console.log(Objekt.hasOwnProperty("Daten")); // wahr Obwohl dieser Unterschied in vielen Fällen keine Rolle spielt, ist es wichtig, dieses Muster zu verstehen, da es bei der Weitergabe von Objekten zu subtilen Problemen führen kann. Glücklicherweise lässt sich dies mit einem aktualisierten Modell leicht beheben. 4. Einziger Lazy-Loading-Attributmodus der Klasse Wenn Sie einen Anwendungsfall haben, bei dem es wichtig ist, dass die Lazy-Loading-Eigenschaft immer in der Instanz vorhanden ist, können Sie die Eigenschaft im Klassenkonstruktor mit Klasse MeineKlasse { Konstruktor() { Objekt.defineProperty(diese, "Daten", { erhalten() { const actualData = einigeExpensiveComputation(); Objekt.defineProperty(diese, "Daten", { Wert: tatsächlicheDaten, beschreibbar: false, konfigurierbar: false }); tatsächliche Daten zurückgeben; }, konfigurierbar: true, aufzählbar: wahr }); } } Hier verwendet der Konstruktor Anschließend führt die Getter-Funktion die Berechnung durch und ruft const-Objekt = neue MyClass(); console.log(Objekt.hasOwnProperty("Daten")); // wahr const data = Objekt.data; console.log(Objekt.hasOwnProperty("Daten")); // wahr Für Klassen ist dies höchstwahrscheinlich das Muster, das Sie verwenden möchten. Objektliterale ermöglichen dagegen einen einfacheren Ansatz. 5. Muster der Lazy-Loading-Eigenschaft für ObjektliteraleWenn Sie ein Objektliteral anstelle einer Klasse verwenden, ist der Vorgang wesentlich einfacher, da für ein Objektliteral definierte Getter genau wie Dateneigenschaften als aufzählbare eigene Eigenschaften (und nicht als Prototypeigenschaften) definiert werden. Dies bedeutet, dass Sie das chaotische Lazy-Loading-Eigenschaftsmuster für Klassen verwenden können, ohne dass es für Objekte chaotisch wird: const Objekt = { Daten abrufen() { const actualData = einigeExpensiveComputation(); Objekt.defineProperty(diese, "Daten", { Wert: tatsächlicheDaten, beschreibbar: false, konfigurierbar: false, aufzählbar: falsch }); tatsächliche Daten zurückgeben; } }; console.log(Objekt.hasOwnProperty("Daten")); // wahr const data = Objekt.data; console.log(Objekt.hasOwnProperty("Daten")); // wahr VI. FazitDie Möglichkeit, Objekteigenschaften in JavaScript neu zu definieren, bietet eine einzigartige Gelegenheit, Informationen zwischenzuspeichern, deren Berechnung möglicherweise teuer wäre. Indem Sie mit als Dateneigenschaften neu definierten Accessor-Eigenschaften beginnen, können Sie die Berechnung bis zum ersten Lesen der Eigenschaft verschieben und das Ergebnis dann zur späteren Verwendung zwischenspeichern. Dieser Ansatz funktioniert sowohl für Klassen als auch für Objektliterale und ist bei Objektliteralen etwas einfacher, da Sie sich keine Sorgen machen müssen, dass Ihre Getter auf dem Prototyp landen. Eine der besten Möglichkeiten zur Leistungssteigerung besteht darin, die wiederholte Ausführung derselben Arbeit zu vermeiden. So können Sie Ihr Programm jederzeit beschleunigen, wenn Sie Ergebnisse zur späteren Verwendung zwischenspeichern können. Techniken wie das Lazy-Loading-Eigenschaftsmuster ermöglichen es, jede Eigenschaft zu einer Caching-Schicht zu machen und so die Leistung zu verbessern. Oben finden Sie eine kurze Erläuterung der Details des Lazy-Loading-Attributmodus in JavaScript. Weitere Informationen zum JS-Lazy-Loading-Attributmodus finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann
Inhaltsverzeichnis 1. Nutzung 2. Ausgabeergebniss...
Einführung in Flex Layout Flex bedeutet auf Engli...
MySQL ist eine häufig verwendete Open-Source-Date...
Im Bereich Design gibt es jedes Jahr unterschiedl...
Dieser Artikel beschreibt die Linux-Systembefehle...
Die Probleme und Lösungen, die beim Bereitstellen...
1. Einführung in Prometheus Prometheus ist eine O...
[Wenn ich mir all die Migrationsdateien im Intern...
Ich erstelle schon lange Websites, habe aber immer...
CSS zum Erzielen des Bildschwebens mit der Maus-F...
zabbix Zabbix ([`zæbiks]) ist eine Open-Source-Lö...
Dies ist mein erster Blogbeitrag. Aus Zeitgründen...
Mindmap Er sieht wahrscheinlich so aus: Die meist...
So ändern Sie den Stil der von elementUI bereitge...
1. Vor- und Nachteile von Indizes Vorteile: schne...