Traditionell 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 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 Unordentliches Lazy-Loading-EigenschaftsmusterEin 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. Muster für Lazy-Loading-Eigenschaften einer 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. Objektliteral-Lazy-Loading-Eigenschaftsmuster Wenn 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 abschließendDie 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 sind die Details des Lazy-Loading-Attributmodus in JavaScript aufgeführt. Weitere Informationen zu den Lazy-Loading-Attributen von JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Erfahren Sie in zehn Minuten, wie Sie Microservices mit Docker bereitstellen
>>: Erläuterung der MySQL-Transaktionsauswahl für die Aktualisierung und Datenkonsistenzverarbeitung
1. Virtuelle Umgebung folgt dem Projekt, erstelle...
Inhaltsverzeichnis 1. Abrufen über --skip-grant-t...
Großes Problem: Löschen Sie nicht einfach die Pyt...
Inhaltsverzeichnis Vorwort Text 1. Globale Regist...
URL-Loader herunterladen yarn add -D URL-Lader Mo...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...
Als ich kürzlich CSS studierte, stellte ich fest,...
In diesem Artikelbeispiel wird der spezifische Ja...
Wenn Sie möchten, dass die gesamte Benutzeroberfl...
1. Installation von MySQL 1. Öffnen Sie die herun...
Ich möchte den Titel links und das Datum rechts a...
Mixins stellen auf flexible Weise verteilte, wied...
In diesem Artikel sehen wir uns an, wie man mit V...
Inhaltsverzeichnis Zwei Module zur Verwendung von...
Methode 1: Verwenden des Onclick-Ereignisses <...