Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 9589|Odpoveď: 0

[JavaScript] Získajte hlboké pochopenie Javascrip{filter}t: meta-módu návrhového vzoru

[Kopírovať odkaz]
Zverejnené 30. 7. 2018 10:30:45 | | |
Zavedenie

Režim flyweight efektívne podporuje veľké množstvo jemnozrnných objektov tým, že používa technológiu zdieľania, čím sa vyhýba záťaži veľkého počtu malých tried s rovnakým obsahom (napríklad spotreba pamäte) a umožňuje všetkým zdieľať triedu (meta-triedu).

V programovaní je niekedy potrebné vytvoriť veľké množstvo inštancií jemnozrnných tried na reprezentáciu dát, a ak zistíte, že tieto inštancie majú v podstate rovnaké režijné náklady okrem niekoľkých parametrov, počet tried, ktoré je potrebné inštancionovať, sa môže výrazne znížiť. Ak dokážete tieto parametre presunúť mimo inštanciu triedy a odovzdať ich pri volaní metódy, môžete výrazne znížiť počet jednotlivých inštancií zdieľaním.

A čo ak použijete meta režim v JavaScripte? Existujú dva spôsoby, prvý sa aplikuje na dátovú vrstvu, hlavne na veľké množstvo podobných objektov v pamäti; Druhá sa aplikuje na vrstvu DOM, ktorá sa dá použiť na centrálnom správcovi udalostí, aby sa zabránilo pripájaniu udalostí ku každému podprvku v rodičovskom kontajneri.

Užite si metaverzum a dátové vrstvy

V Flyweight existujú dva dôležité koncepty – vnútorný stav vnútorný a vonkajší stav, vnútorný stav sa spravuje v objekte pomocou interných metód a vonkajšie informácie môžu byť vymazané alebo uložené externe.

Úprimne povedané, najprv ide o to, že sa ukradne originálny model, potom pri rôznych príležitostiach a prostrediach a potom sa vyrobia konkrétne modely s vlastnými charakteristikami, samozrejme, tu je potrebné generovať rôzne nové objekty, takže továrenský režim sa často objavuje v režime Flyweight, vnútorný stav Flyweight sa používa na zdieľanie a továreň Flyweight je zodpovedná za udržiavanie Flyweight poolu (vzorového poolu) na uloženie objektov vnútorného stavu.

Použite režim Yuanyuan

Ukážme, že ak by sme mali knižnicu na správu všetkých kníh, metadáta pre každú knihu by predbežne vyzerali takto:

ID
Titul
Autor
Žáner
Počet strán
Vydavateľské ID
ISBN

Musíme tiež definovať, kedy a kým bola každá kniha požičaná, ako aj dátum vrátenia a dostupnosť:

dátum odchodu
checkoutMember
dueReturnDate
Dostupnosť

Keďže objekt knihy je nastavený na nasledujúci kód, všimnite si, že kód ešte nebol optimalizovaný:


Program môže byť spočiatku v poriadku, ale časom sa počet kníh môže zvyšovať vo veľkom množstve, každá kniha má inú verziu a množstvo, a zistíte, že systém sa stále spomaľuje. Tisíce knižných objektov v pamäti si možno predstaviť a musíme ich optimalizovať v režime zdieľania.

Dáta môžeme rozdeliť na dva typy údajov: interné a externé, pričom údaje súvisiace s objektom knihy (názov, autor atď.) môžu byť priradené interným atribútom, zatiaľ čo (checkoutMember, dueReturnDate a pod.) môžu byť priradené externým atribútom. Týmto spôsobom môže nasledujúci kód zdieľať ten istý objekt v tej istej knihe, pretože bez ohľadu na to, kto si knihu požičia, pokiaľ je kniha tou istou knihou, základné informácie zostávajú rovnaké:



Definujte základnú továreň

Definujme základnú továreň na overenie, či bol objekt knihy vytvorený predtým, vrátime, ak áno, a znovu ju vytvoríme a uložíme, ak nie, čo zabezpečí, že vytvoríme objekt len pre každý typ knihy:



Správa externého stavu


Vonkajší stav je relatívne jednoduchý, okrem knihy, ktorú sme zhrnuli, všetko ostatné treba tu spravovať:



Týmto spôsobom môžeme uložiť rovnaké informácie z tej istej knihy do objektu bookmanagera a len jednu kópiu; V porovnaní s predchádzajúcim kódom sa dá zistiť, že sa ušetrí veľa pamäte.

Uži si meta mód a DOM


O incidente s bublaním DOM tu veľa nepoviem, myslím, že to už všetci vedia, uveďme dva príklady.

Príklad 1: Centralizované riadenie incidentov
Napríklad, ak máme mnoho podobných typov prvkov alebo štruktúr (ako menu alebo viacero li v ul), ktoré potrebujú monitorovať jeho klikaciu udalosť, potom musíme priradiť každý ďalší prvok na viazanie udalostí; ak je ich veľmi, veľmi veľa, potom si môžeme predstaviť výkon, a v kombinácii s vedomosťou bublinovania, ak má niektorý podlogový prvok spúšťač udalosti, udalosť sa po spustení presúva na vyšší prvok, takže pomocou tejto funkcie môžeme použiť režim Xiangyuan. Môžeme monitorovať udalosti rodičovských prvkov týchto podobných prvkov a potom určiť, ktorý podčlenný prvok má spustenú udalosť pred pokračovaním v ďalších operáciách.

Tu spojíme metódy bind/unbind v jQuery ako príklad.

HTML:



JavaScript:



Príklad 2: Použiť režim Xiangyuan na zlepšenie výkonu

Ďalší príklad, stále súvisiaci s jQuery, zvyčajne používame element objekt v callback funkcii udalosti, často používame formu $(this), v skutočnosti opakovane vytvára nový objekt, pretože v callback funkcii je už samotný DOM prvok, musíme použiť nasledujúci kód:



V skutočnosti, ak musíme použiť niečo ako $(this), môžeme tiež implementovať vlastnú verziu vzoru pre jednotlivé inštancie, napríklad môžeme implementovať funkciu ako jQuery.signle(this), ktorá vráti samotný prvok DOM:



Ako používať:



Tým sa vráti samotný prvok DOM tak, ako je, bez vytvorenia objektu jQuery.

súhrn


Režim flyweight je režim, ktorý zlepšuje efektivitu a výkon programu, čo výrazne zrýchli beh programu. Existuje mnoho aplikácií: napríklad ak chcete čítať sériu reťazcov z databázy, z ktorých mnohé sú duplikáty, môžeme tieto reťazce uložiť do Flyweight poolu.

Ak aplikácia používa veľké množstvo objektov a tieto veľké množstvo objektov spôsobujú veľkú spokojnosť s úložiskom, mala by zvážiť použitie režimu zdieľania; Ak odstránite vonkajší stav objektu, môžete nahradiť mnoho skupín objektov relatívne malým počtom zdieľaných objektov a môžete zvážiť použitie režimu Xiangyuan.

Referenčná adresa:http://www.addyosmani.com/resour ... ok/#detailflyweight





Predchádzajúci:Odporúčam 3 webové stránky na hľadanie ikon ikon
Budúci:PočetČakajúcichSpráv, Správy v rade, Správy...
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com