In JavaScript vermitteln Browser, insbesondere Browser auf mobilen Geräten, sehr begrenzte Speicher, und das Speichern von Speicher ist eine sehr sinnvolle Sache geworden. Ein effektiver Weg, um Speicher zu sparen, besteht darin, die Anzahl der Objekte zu reduzieren.
Der Flygewichtsmodus (Flygewicht) führt die Freigabetechnologie aus, um eine große Anzahl feinkörniger Objekte effektiv zu unterstützen, wodurch der Aufwand einer großen Anzahl kleiner Klassen mit demselben Inhalt (z. B. Speicherkonsum) und jedem ermöglicht wird, eine Klasse zu teilen (MetaClass).
Das Enzyklopädie -Muster kann eine große Menge an Overhead von sehr ähnlichen Klassen vermeiden. Bei der Programmierung ist es manchmal notwendig, eine große Anzahl feinkörniger Klasseninstanzen zu erstellen, um Daten darzustellen. Wenn Sie feststellen, dass diese Instanzen im Grunde genommen den gleichen Overhead aufweisen, mit Ausnahme einiger Parameter, können Sie die Anzahl der Klassen, die instanziiert werden müssen, erheblich reduzieren. Wenn diese Parameter außerhalb der Klasseninstanz verschoben werden können und sie angeben, wenn die Methode aufgerufen wird, kann die Anzahl der einzelnen Instanzen durch Freigabe stark reduziert werden.
Es gibt zwei Möglichkeiten, den Enzyklopädie -Modus in JavaScript anzuwenden. Die erste besteht darin, es auf die Datenschicht anzuwenden, hauptsächlich auf eine große Anzahl ähnlicher Objekte im Speicher. Die zweite besteht darin, es auf die DOM -Schicht anzuwenden. Enzyklopädie kann im zentralen Ereignismanager verwendet werden, um das Hinzufügen von Ereignisgriffen zu jedem untergeordneten Element im übergeordneten Container zu vermeiden.
Es gibt zwei wichtige Konzepte im Fliegengewicht - interner Zustand intrinsisch und externer Zustand extrinsisch. Der interne Zustand wird durch interne Methoden im Objekt verwaltet, und externe Informationen können extern gelöscht oder gespeichert werden.
Um es unverblümt auszudrücken, soll zuerst ein Originalmodell eingeklemmt werden und dann bestimmte Modelle mit unterschiedlichen Eigenschaften gemäß verschiedenen Anlässen und Umgebungen erzeugt werden. Offensichtlich müssen hier verschiedene neue Objekte generiert werden, sodass der Werksmodus häufig im Fliegengewichtsmodus angezeigt wird. Der interne Fliegengewicht wird verwendet, um zu teilen. Die Flyweight Factory ist für die Aufrechterhaltung eines Flygewichts -Pools (Moduspool) verantwortlich, um Objekte mit internem Zustand zu speichern.
Wir können alle Objekte durch denselben internen Zustand durch dasselbe gemeinsam genutzte Objekt ersetzen und um ein solches gemeinsames Objekt zu erstellen. Anstelle eines normalen Konstruktors ist eine Singleton -Fabrikmethode erforderlich. Dies kann einzelne Objekte verfolgen, die instanziiert wurden, so dass ein neues Objekt nur erstellt wird, wenn sich der interne Zustand des erforderlichen Objekts vom vorhandenen Objekt unterscheidet. Der externe Zustand des Objekts wird in einem Manager -Objekt gespeichert. Wenn der Manager diese externen Zustände als Parameter übergeht, übergibt der Manager die Methode des Objekts.
Speichern Sie die Daten eines Objekts in zwei verschiedenen Objekten (Shared -Objekt, Manager -Objekt).
1. Shared Objekt (genießen Sie das ursprüngliche Objekt)
2. Singleton Factory -Methode (Erstellen Sie ein gemeinsames Objekt)
3. Manager -Objekt (externer Zustand verwalten)
Zum Beispiel kann ein Buch in einer Bibliothek durch ein Objekt dargestellt werden, das viele Attribute aufweist.
var book = function (ID, Titel, Autor, Genre, PageCount, Publisherid, ISBN, Checkoutdate, CheckoutMember, DuereturnDate, Verfügbarkeit) {... // Initialisierungscode} book }.Das Programm mag zu Beginn in Ordnung sein, aber im Laufe der Zeit können Bücher in großen Mengen zunehmen, und jede Art von Buch hat unterschiedliche Versionen und Mengen. Sie werden feststellen, dass das System immer langsamer und langsamer wird. Tausende von Buchobjekten können im Speicher vorgestellt werden, und wir müssen den Enzyklopädie -Modus zur Optimierung verwenden.
Wir können die Daten in zwei Arten von Daten unterteilen. Im selben Buch können die Daten zu Buchobjekten (Titel, Autor usw.) interne Eigenschaften zugeordnet werden, während (CheckoutMember, DuereturnDate usw.) externe Eigenschaften zugeordnet werden können. Auf diese Weise kann der folgende Code dasselbe Objekt im selben Buch teilen, denn egal wer das Buch leiht, solange das Buch dasselbe Buch ist, sind die grundlegenden Informationen dieselben:
// Shared Object var book = function (Titel, Autor, Genre, PageCount, Publisherid, ISBN) {this.title = title; this.author = Autor; this.genre = Genre; this.pageCount = pageCount; this.publisherid = publisherId; this.isbn = isbn;};Lassen Sie uns eine grundlegende Fabrik definieren, um zu überprüfen, ob das Objekt des Buches zuvor erstellt wurde, kehren Sie zurück, wenn es vorhanden ist, und erstellen und speichern es, damit es später weiterhin zugreifen kann, was sicherstellt, dass wir nur ein Objekt für jedes Buch erstellen:
/* Book Factory Singleton*/var bookFactory = (function () {var existierbücher = {}; return {createBook: function (Titel, Autor, Genre, PageCount, PublisherId, ISBN) {/* Finden Sie vor dem Erstellen vor*/var vorhandener Buchbücher [ISBN]; Buch (Titel, Genre, PageCount, Publisherid, ISBN);Der externe Zustand ist relativ einfach. Mit Ausnahme des Buches, das wir verkapselt haben, muss hier alles andere verwaltet werden:
/*BookRecordManager Singleton für das Ausleihenmanagement*/var bookRecordManager = (function () {var bookRecordDatabase = {}; return {/*fügen Sie einen Ausleihrekord hinzu Bookfactory.Createbebook (Titel, Genre, PageCount, Publisherid, ISBN); checkoutdate, checkoutMember, NewReturndate) {var record = bookRecordDatabase [bookId]; bookRecordDatabase [bookId] .DuerTurnDate = NewReturnDate;Auf diese Weise haben wir dieselben Informationen des gleichen Buches in einem Buchmanager -Objekt gespeichert und nur eine Kopie gespeichert. Im Vergleich zum vorherigen Code können wir feststellen, dass er viel Speicher spart.
Objektpool
Der Objektpool ist eine weitere Lösung zur Leistungsoptimierung, die einige Ähnlichkeiten mit dem Xiangyuan -Modus aufweist, aber den internen Zustand und den externen Zustand nicht trennen.
Allgemeine Objektpool -Implementierung:
var ObjectPoolFactory = Funktion (createObjfn) {var ObjectPool = []; // Objektpool return {create: function () {// ruf var obj = objectpool.length === 0? createObjfn.apply (this, Argumente): ObjectPool.Shift (); Rückkehr obj; }, wiederherstellen: Funktion (obj) {// ObjectPool.push (obj) abrufen; }}};Verwenden Sie nun ObjectPoolFactory, um einen Objektpool zu erstellen, der einige IFRames lädt:
var iframeFactory = ObjectPoolFactory (function () {var iframe = document.createElement ('iframe'); document.body.appendChild (iframe); iframe.onload = function () {iframe.onload = null; // Bugs von ifrAne lading ifrAnrame -zurück -zurückrückungsrückgebener. }; // rufen Sie var iframe1 = iframeFactory.create () auf; iframe1.src = 'http://www.qq.com';Referenzen: "JavaScript -Muster" "JavaScript -Designmuster und Entwicklungspraxis"
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.