|
|
Pubblicato su 30/07/2018 10:30:45
|
|
|

Introduzione
La modalità flyweight supporta efficacemente un gran numero di oggetti a grana fine eseguendo tecnologie di condivisione, evitando il sovraccarico di un gran numero di piccole classi con lo stesso contenuto (come il consumo di memoria) e permettendo a tutti di condividere una classe (meta-classe).
In programmazione, a volte è necessario produrre un gran numero di istanze di classi a grana fine per rappresentare i dati, e se si riesce a constatare che queste istanze hanno sostanzialmente lo stesso overhead tranne che per pochi parametri, il numero di classi da istanziare può essere notevolmente ridotto. Se riesci a spostare quei parametri fuori dall'istanza della classe e passarli quando il metodo viene chiamato, puoi ridurre notevolmente il numero di singole istanze condividendo.
E allora, se applichi la modalità meta in JavaScript? Ci sono due modi: il primo viene applicato al livello dati, principalmente a un gran numero di oggetti simili in memoria; Il secondo viene applicato al livello DOM, che può essere utilizzato nel gestore eventi centrale per evitare di associare handle degli eventi a ogni elemento figlio nel contenitore genitore.
Goditi metaverso e livelli dati
Ci sono due concetti importanti in Flyweight: stato interno intrinseco e stato esterno estrinseco, stato interno è gestito nell'oggetto tramite metodi interni e le informazioni esterne possono essere eliminate o salvate esternamente.
Per dirla senza mezzi termini, si tratta prima di pizzicare un modello originale, poi con diverse occasioni e ambienti, e infine produrre modelli specifici con caratteristiche proprie; ovviamente, qui devono essere generati nuovi oggetti diversi, quindi la modalità fabbrica spesso appare nella modalità Flyweight, lo stato interno del Flyweight viene usato per condividere, e la fabbrica Flyweight è responsabile del mantenimento di un pool di Flyweight (pool di pattern) per memorizzare gli oggetti dello stato interno.
Usa la modalità Yuanyuan
Dimostriamo che se avessimo una biblioteca per gestire tutti i libri, i metadati di ciascun libro sarebbero provvisoriamente così:
ID Titolo Autore Genere Numero di pagine ID editore ISBN Dobbiamo anche definire quando e da chi è stato preso in prestito ogni libro, oltre alla data di restituzione e alla disponibilità:
Data di checkout checkoutMember DueReturnDate Disponibilità Poiché l'oggetto libro è impostato sul seguente codice, si noti che il codice non è ancora stato ottimizzato:
Il programma può andare bene all'inizio, ma col tempo il numero di libri può aumentare in grandi quantità, e ogni libro ha una versione e una quantità diverse, e scoprirai che il sistema sta diventando sempre più lento. Migliaia di oggetti libro nella memoria possono essere immaginati, e dobbiamo ottimizzarli con la modalità di condivisione.
Possiamo suddividere i dati in due tipi di dati: interni ed esterni, e i dati relativi all'oggetto del libro (titolo, autore, ecc.) possono essere attribuiti ad attributi interni, mentre (checkoutMember, dueReturnDate, ecc.) possono essere attribuiti ad attributi esterni. In questo modo, il seguente codice può condividere lo stesso oggetto nello stesso libro, perché indipendentemente da chi prenda in prestito il libro, finché il libro è lo stesso libro, le informazioni di base sono le stesse:
Definisci la fabbrica di base
Definiamo una fabbrica di base per verificare se l'oggetto del libro è stato creato prima, restituirlo se c'è, e ricrearlo e memorizzarlo se no, assicurando così che creiamo un oggetto solo per ogni tipo di libro:
Gestire lo stato esterno
Lo stato esterno è relativamente semplice, tranne per il libro che abbiamo racchiuso, tutto il resto va gestito qui:
In questo modo, possiamo salvare le stesse informazioni dello stesso libro in un oggetto bookmanager, e solo una copia; Rispetto al codice precedente, si può scoprire che molta memoria viene salvata.
Goditi la meta modalità e DOM
Non dirò molto sull'incidente del bollo al DOM qui, credo che tutti lo sappiano già, facciamo due esempi.
Esempio 1: Gestione centralizzata degli incidenti Ad esempio, se abbiamo molti tipi simili di elementi o strutture (come menu, o più li in ul) che devono monitorare il suo evento click, allora dobbiamo associare ogni elemento in più per il lego degli eventi; se ci sono moltissimi elementi, allora la performance può essere immaginata e, combinata con la conoscenza del bubbling, se un elemento figlio ha un trigger di evento, l'evento si evolverà all'elemento superiore dopo l'attivazione, quindi usando questa funzione possiamo usare la modalità Xiangyuan. Possiamo monitorare gli eventi degli elementi genitori di questi elementi simili e poi determinare quale elemento figlio ha un evento attivato prima di procedere con ulteriori operazioni.
Qui combineremo i metodi bind/unbind di jQuery come esempio.
HTML:
JavaScript:
Esempio 2: Applica la modalità Xiangyuan per migliorare le prestazioni
Un altro esempio, ancora legato a jQuery, generalmente usiamo l'oggetto elemento nella funzione callback dell'evento, spesso usiamo la forma $(this), infatti crea ripetutamente un nuovo oggetto, poiché questo nella funzione callback è già l'elemento DOM stesso, dobbiamo usare il seguente codice:
Infatti, se dobbiamo usare qualcosa come $(this), possiamo anche implementare una nostra versione del pattern single-instance, ad esempio possiamo implementare una funzione come jQuery.signle(this) per restituire l'elemento DOM stesso:
Come utilizzare:
Questo restituisce l'elemento DOM stesso così com'è, senza creare un oggetto jQuery.
sommario
La modalità flyweight è una modalità che migliora l'efficienza e le prestazioni del programma, accelerando notevolmente la velocità di esecuzione del programma. Ci sono molte applicazioni: ad esempio, se vuoi leggere una serie di stringhe da un database, molte delle quali sono duplicate, allora possiamo memorizzare queste stringhe in un pool Flyweight.
Se un'applicazione utilizza un gran numero di oggetti, e questo gran numero di oggetti causa molta soddisfazione nello storage, dovrebbe considerare l'uso della modalità di condivisione; Se elimini lo stato esterno dell'oggetto, puoi sostituire molti gruppi di oggetti con relativamente pochi oggetti condivisi, e puoi considerare l'uso della modalità Xiangyuan.
Indirizzo di riferimento:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Precedente:Consiglio 3 siti web per trovare icone di iconeProssimo:NumeroMessaggi Pendenti, Messaggi In Fila, Messaggi...
|