|
|
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 ikonBudúci:PočetČakajúcichSpráv, Správy v rade, Správy...
|