Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 9589|Răspunde: 0

[JavaScript] Dobândește o înțelegere aprofundată a Javascrip{filter}t: meta-modul modelului de proiectare

[Copiază linkul]
Postat pe 30.07.2018 10:30:45 | | |
Introducere

Modul flyweight suportă eficient un număr mare de obiecte detaliate prin rularea tehnologiei de partajare, evitând efortul unui număr mare de clase mici cu același conținut (cum ar fi consumul memoriei) și permițând tuturor să împartă o clasă (meta-clasă).

În programare, uneori este necesar să se producă un număr mare de instanțe de clase cu granulație fină pentru a reprezenta datele, iar dacă poți descoperi că aceste instanțe au practic aceeași responsabilitate, cu excepția câtorva parametri, numărul de clase care trebuie instanțiate poate fi redus considerabil. Dacă poți muta acei parametri în afara instanței clasei și să-i trimiți când metoda este apelată, poți reduce semnificativ numărul instanțelor individuale prin partajare.

Și ce dacă aplici modul meta în JavaScript? Există două moduri: primul se aplică stratului de date, în principal unui număr mare de obiecte similare în memorie; Al doilea este aplicat stratului DOM, care poate fi folosit pe managerul central de evenimente pentru a evita atașarea de handle-uri de eveniment fiecărui element copil din containerul părinte.

Bucură-te de metavers și straturile de date

Există două concepte importante în Flyweight - starea internă intrinsecă și starea externă extrinsecă, starea internă este gestionată în obiect prin metode interne, iar informațiile externe pot fi șterse sau salvate extern.

Ca să fiu direct, este vorba de a prelua mai întâi un model original, apoi, în diferite ocazii și medii, și apoi de a produce modele specifice cu propriile caracteristici; evident, aici trebuie generate obiecte noi diferite, astfel încât modul fabricii apare adesea în modul Flyweight, starea internă a Flyweight este folosită pentru partajare, iar fabrica Flyweight este responsabilă pentru menținerea unui pool Flyweight (pool de modele) pentru a stoca obiectele din starea internă.

Folosește modul Yuanyuan

Să demonstrăm că, dacă am avea o bibliotecă care să gestioneze toate cărțile, metadatele pentru fiecare carte ar arăta provizoriu astfel:

ID
Titlu
Autor
Gen
Număr de pagini
ID-ul editorului
ISBN

De asemenea, trebuie să definim când și de către cine a fost împrumutată fiecare carte, precum și data returnării și disponibilitatea:

Data finalizării
checkoutMember
DueReturnDate
Disponibilitate

Deoarece obiectul book este setat pe următorul cod, rețineți că codul nu a fost încă optimizat:


Programul poate fi în regulă la început, dar în timp, numărul de cărți poate crește în cantități mari, iar fiecare carte are o versiune și o cantitate diferită, iar vei observa că sistemul devine tot mai lent. Mii de obiecte cărți în memorie pot fi imaginate și trebuie să le optimizăm cu modul de partajare.

Putem împărți datele în două tipuri de date: interne și externe, iar datele legate de obiectul cărții (titlu, autor etc.) pot fi atribuite atributelor interne, în timp ce (checkoutMember, dueReturnDate, etc.) pot fi atribuite atributelor externe. Astfel, codul următor poate împărtăși același obiect în aceeași carte, pentru că, indiferent cine împrumută cartea, atâta timp cât cartea este aceeași carte, informația de bază este aceeași:



Definiți fabrica de bază

Să definim o fabrică de bază pentru a verifica dacă obiectul cărții a fost creat înainte, să returnăm dacă există, și să o recreăm și să o stocăm dacă nu, ceea ce asigură că creăm un obiect doar pentru fiecare tip de carte:



Gestionarea statutului extern


Starea externă este relativ simplă, cu excepția cărții pe care am cuprins-o, restul trebuie gestionat aici:



Astfel, putem salva aceleași informații din aceeași carte într-un obiect bookmanager și doar o singură copie; Comparativ cu codul anterior, se poate observa că se salvează multă memorie.

Bucură-te de modul meta și de DOM


Nu voi spune prea multe despre incidentul cu bulele din DOM aici, cred că toată lumea știe deja, să dăm două exemple.

Exemplul 1: Managementul centralizat al incidentelor
De exemplu, dacă avem multe tipuri similare de elemente sau structuri (cum ar fi meniuri sau mai multe li în ul) care trebuie să monitorizeze evenimentul de click, atunci trebuie să legăm fiecare element suplimentar pentru legarea evenimentelor; dacă sunt foarte, foarte multe elemente, performanța poate fi imaginată, iar combinată cu cunoașterea bubulei, dacă orice element copil are un declanșator de eveniment, evenimentul va crește la elementul superior după declanșare, deci folosind această caracteristică putem folosi modul Xiangyuan. Putem monitoriza evenimentele elementelor părinte ale acestor elemente similare și apoi putem determina care element copil are un eveniment declanșat înainte de a continua operațiile.

Aici vom combina metodele bind/unbind ale jQuery ca exemplu.

HTML:



JavaScript:



Exemplul 2: Aplică modul Xiangyuan pentru a îmbunătăți performanța

Un alt exemplu, tot legat de jQuery, în general folosim obiectul element în funcția de callback a evenimentului, adesea folosim forma $(this), de fapt, creează în mod repetat un obiect nou, deoarece acesta în funcția de callback este deja elementul DOM în sine, trebuie să folosim următorul cod:



De fapt, dacă trebuie să folosim ceva de genul $(this), putem implementa și propria noastră versiune a modelului single-instant, de exemplu, putem implementa o funcție precum jQuery.signle(this) pentru a returna elementul DOM în sine:



Cum să folosești:



Aceasta returnează elementul DOM în sine așa cum este, fără a crea un obiect jQuery.

rezumat


Modul flyweight este un mod care îmbunătățește eficiența și performanța programului, ceea ce va accelera considerabil viteza de rulare a programului. Există multe aplicații: de exemplu, dacă vrei să citești o serie de șiruri dintr-o bază de date, multe dintre ele fiind duplicate, atunci putem stoca aceste șiruri într-un pool Flyweight.

Dacă o aplicație folosește un număr mare de obiecte, iar acest număr mare de obiecte aduce multă satisfacție la stocare, ar trebui să ia în considerare folosirea modului de partajare; Dacă ștergi starea externă a obiectului, poți înlocui multe grupuri de obiecte cu relativ puține obiecte partajate și poți lua în considerare folosirea modului Xiangyuan.

Adresă de referință:http://www.addyosmani.com/resour ... ok/#detailflyweight





Precedent:Recomand 3 site-uri pentru a găsi icoane de pictogramă
Următor:NumărulDeMesajeAșteptate, MesajeAliniate, Mesaje...
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com