|
|
Veröffentlicht am 30.07.2018 10:30:45
|
|
|

Einleitung
Der Flyweight-Modus unterstützt effektiv eine große Anzahl feinkörniger Objekte, indem er Sharing-Technologie betreibt, wodurch der Overhead einer großen Anzahl kleiner Klassen mit demselben Inhalt (z. B. Speicherverbrauch) vermieden wird und jeder eine Klasse teilen kann (Meta-Klasse).
In der Programmierung ist es manchmal notwendig, eine große Anzahl feinkörniger Klasseninstanzen zu erstellen, um Daten darzustellen, und wenn man feststellt, dass diese Instanzen im Wesentlichen denselben Overhead bis auf wenige Parameter haben, kann die Anzahl der zu instanziierten Klassen stark reduziert werden. Wenn du diese Parameter außerhalb der Klasseninstanz verschieben und sie beim Aufruf der Methode weitergeben kannst, kannst du die Anzahl der einzelnen Instanzen durch Teilen erheblich reduzieren.
Was ist schon, wenn du den Meta-Modus in JavaScript anwendest? Es gibt zwei Möglichkeiten: Die erste wird auf die Datenschicht angewendet, hauptsächlich auf eine große Anzahl ähnlicher Objekte im Speicher; Die zweite wird auf die DOM-Schicht angewendet, die im zentralen Ereignismanager verwendet werden kann, um zu vermeiden, dass Ereignisgriffe an jedes Kindelement im Elterncontainer angehängt werden.
Genießen Sie Metaverse und Datenschichten
Im Flyweight gibt es zwei wichtige Konzepte – innerer Zustand intrinsisch und externer Zustand extrinsisch, der interne Zustand wird im Objekt über interne Methoden verwaltet, und externe Informationen können gelöscht oder extern gespeichert werden.
Um es klar zu sagen: Zuerst wird ein Originalmodell gekneift, dann mit verschiedenen Anlässen und Umgebungen bestimmte Modelle mit eigenen Eigenschaften erstellt; natürlich müssen hier neue Objekte generiert werden, sodass der Fabrikmodus oft im Flyweight-Modus erscheint, der interne Zustand des Flyweight zum Teilen verwendet wird und die Flyweight-Fabrik für die Pflege eines Flyweight-Pools (Musterpool) verantwortlich ist, um die Objekte des internen Zustands zu speichern.
Nutze den Yuanyuan-Modus
Zeigen wir mal, dass, wenn wir eine Bibliothek hätten, die alle Bücher verwalten würde, die Metadaten für jedes Buch vorläufig so aussehen würden:
ID Titel Autor Genre Seitenzahl Verlags-ID ISBN Wir müssen außerdem festlegen, wann und von wem jedes Buch ausgeliehen wurde, sowie das Rückgabedatum und die Verfügbarkeit:
CheckoutDatum checkoutMitglied dueReturnDate Verfügbarkeit Da das book-Objekt auf folgenden Code gesetzt ist, ist zu beachten, dass der Code noch nicht optimiert wurde:
Das Programm mag anfangs in Ordnung sein, aber mit der Zeit kann die Anzahl der Bücher in großen Stückzahlen steigen, und jedes Buch hat eine andere Version und Stückzahl, sodass das System immer langsamer wird. Tausende Buchobjekte im Speicher können sich vorstellen, und wir müssen sie mit dem Sharing-Modus optimieren.
Wir können die Daten in zwei Arten von Daten unterteilen: interne und externe, und die mit dem Buchobjekt bezogenen Daten (Titel, Autor usw.) können internen Attributen zugeordnet werden, während (checkoutMember, dueReturnDate usw.) externen Attributen zugeordnet werden können. Auf diese Weise kann der folgende Code dasselbe Objekt im selben Buch teilen, denn egal, wer das Buch ausleiht, solange es sich um dasselbe Buch handelt, sind die Grundinformationen gleich:
Definiere die grundlegende Fabrik
Definieren wir eine einfache Fabrik, um zu prüfen, ob das Objekt des Buches vorher erstellt wurde, zurückzugeben, falls vorhanden, und es neu zu erstellen und zu speichern, falls nicht, was sicherstellt, dass wir nur für jeden Buchtyp ein Objekt erstellen:
Verwalten Sie den externen Status
Der externe Zustand ist relativ einfach, abgesehen von dem Buch, das wir zusammengefasst haben, muss hier alles andere geregelt werden:
Auf diese Weise können wir dieselben Informationen desselben Buches in einem Bookmanager-Objekt speichern und nur eine Kopie; Im Vergleich zum vorherigen Code wird viel Speicher gespeichert.
Genieße den Meta-Modus und DOM
Zum DOM-Blasen-Vorfall will ich hier nicht viel sagen, ich glaube, jeder weiß es schon, nennen wir zwei Beispiele.
Beispiel 1: Zentralisiertes Vorfallmanagement Zum Beispiel, wenn wir viele ähnliche Arten von Elementen oder Strukturen haben (wie Menüs oder mehrere li in ul), die sein Klickereignis überwachen müssen, dann müssen wir jedes weitere Element für die Ereignisbindung binden; wenn es sehr, sehr viele Elemente gibt, kann die Leistung vorgestellt werden, und kombiniert mit dem Wissen über Blasen, wenn ein Kindelement einen Ereignisauslöser hat, wird das Ereignis nach dem Auslösen zum höheren Element übergehen, daher können wir mit dieser Funktion den Xiangyuan-Modus verwenden. Wir können die Ereignisse der Elternelemente dieser ähnlichen Elemente überwachen und dann bestimmen, welches Kindelement ein ausgelöstes Ereignis hat, bevor wir mit weiteren Operationen fortfahren.
Hier kombinieren wir als Beispiel die Bind-/Entbindungsmethoden von jQuery.
HTML:
JavaScript:
Beispiel 2: Wenden Sie den Xiangyuan-Modus an, um die Leistung zu verbessern
Ein weiteres Beispiel, das weiterhin mit jQuery zusammenhängt: Im Allgemeinen verwenden wir das Element-Objekt in der Callback-Funktion des Ereignisses, oft verwenden wir die Form $(this), tatsächlich erzeugt es wiederholt ein neues Objekt, da dies in der Callback-Funktion bereits das DOM-Element selbst ist, müssen wir folgenden Code verwenden:
Tatsächlich können wir, wenn wir etwas wie $(this) verwenden müssen, auch unsere eigene Version des Single-Instanz-Musters implementieren, zum Beispiel eine Funktion wie jQuery.signle(this), um das DOM-Element selbst zurückzugeben:
Wie man verwendet:
Dies gibt das DOM-Element selbst so zurück, wie es ist, ohne ein jQuery-Objekt zu erstellen.
Zusammenfassung
Der Flyweight-Modus ist ein Modus, der die Effizienz und Leistung des Programms verbessert und die Laufgeschwindigkeit des Programms erheblich beschleunigt. Es gibt viele Anwendungsmöglichkeiten: Wenn man zum Beispiel eine Reihe von Strings aus einer Datenbank lesen möchte, von denen viele Duplikate sind, können wir diese Strings in einem Flyweight-Pool speichern.
Wenn eine Anwendung eine große Anzahl von Objekten verwendet und diese große Anzahl von Objekten zu viel Speicherzufriedenheit führt, sollte sie den Sharing-Modus in Betracht ziehen; Wenn du den externen Zustand des Objekts löschst, kannst du viele Gruppen von Objekten durch relativ wenige gemeinsame Objekte ersetzen, und du kannst den Xiangyuan-Modus in Betracht ziehen.
Referenzadresse:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Vorhergehend:Empfehle 3 Webseiten, um Icon-Icons zu findenNächster:NummerVonPendingNachrichten, NachrichtenWarteschlange, Messag...
|