|
|
Zveřejněno 30.07.2018 10:30:45
|
|
|

Úvod
Režim flyweight efektivně podporuje velké množství jemnozrnných objektů tím, že používá technologii sdílení, čímž se vydává zátěž velkého počtu malých tříd se stejným obsahem (například spotřeba paměti) a umožňuje všem sdílet třídu (meta-třídu).
V programování je někdy nutné vytvořit velké množství jemnozrnných instancí tříd pro reprezentaci dat, a pokud zjistíte, že tyto instance mají v podstatě stejnou režii kromě několika parametrů, počet tříd, které je třeba instancovat, lze výrazně snížit. Pokud dokážete tyto parametry přesunout mimo instanci třídy a předat je při volání metody, můžete výrazně snížit počet jednotlivých instancí sdílením.
A co když použijete meta režim v JavaScriptu? Existují dva způsoby, první se aplikuje na datovou vrstvu, hlavně na velké množství podobných objektů v paměti; Druhá se aplikuje na vrstvu DOM, kterou lze použít na centrálním event manageru, aby se zabránilo připojování rukojetí událostí ke každému podprvku v nadřazeném kontejneru.
Užijte si metaverse a datové vrstvy
Ve Flyweight existují dva důležité koncepty – vnitřní stav a vnější stav, vnitřní stav je spravován v objektu pomocí interních metod a externí informace lze smazat nebo uložit externě.
Upřímně řečeno, jde nejprve o získání původního modelu, pak při různých příležitostech a prostředích a následné výrobě konkrétních modelů s jejich vlastními charakteristikami, samozřejmě je zde potřeba generovat různé nové objekty, takže tovární režim se často objevuje v režimu Flyweight, vnitřní stav Flyweight se používá ke sdílení a továrna Flyweight je zodpovědná za udržování poolu Flyweight (pool vzorů) pro ukládání objektů vnitřního stavu.
Použijte režim Yuanyuan
Ukažme, že kdybychom měli knihovnu, která by spravovala všechny knihy, metadata každé knihy by předběžně vypadala takto:
ID Titul Autor Žánr Počet stran Vydavatelské ID ISBN Musíme také definovat, kdy a kdo si kterou knihu půjčil, stejně jako datum vrácení a dostupnost:
Datum odchodu checkoutMember doNávratDatum Dostupnost Protože je objekt knihy nastaven na následující kód, všimněte si, že kód ještě nebyl optimalizován:
Program může být zpočátku v pořádku, ale časem se počet knih může výrazně zvýšit, každá kniha má jinou verzi a množství, a zjistíte, že systém se stále zpomaluje. Tisíce knižních objektů v paměti si lze představit a musíme je optimalizovat pomocí režimu sdílení.
Data můžeme rozdělit na dva typy dat: interní a externí, a data související s objektem knihy (název, autor atd.) lze přiřadit interním atributům, zatímco (checkoutMember, dueReturnDate atd.) lze přiřadit externím atributům. Tímto způsobem může následující kód sdílet stejný objekt ve stejné knize, protože bez ohledu na to, kdo si knihu půjčí, pokud je kniha stejná, základní informace jsou stejné:
Definujte základní továrnu
Definujme základní továrnu, která ověří, zda byl objekt knihy vytvořen dříve, vrátí, pokud ano, a znovu ji vytvoří a uloží, pokud ne, což zajistí, že vytvoříme objekt pouze pro každý typ knihy:
Správa externího stavu
Vnější stav je relativně jednoduchý, kromě knihy, kterou jsme shrnuli, vše ostatní je třeba zde spravovat:
Tímto způsobem můžeme uložit stejné informace o téže knize do objektu bookmanageru a pouze jednu kopii; Ve srovnání s předchozím kódem lze zjistit, že se ušetří hodně paměti.
Užij si meta mód a DOM
O incidentu s bublajícím DOM tu moc neřeknu, věřím, že to už všichni vědí, uveďme dva příklady.
Příklad 1: Centralizované řízení incidentů Například pokud máme mnoho podobných typů prvků nebo struktur (například menu nebo více li v ul), které potřebují sledovat jeho klikací událost, pak musíme každý další prvek přiřadit pro vazbu události; pokud je prvků velmi, velmi mnoho, lze si výkon představit, a v kombinaci s vědomím bublin, pokud má nějaký podprvek spouštěč události, událost se po spuštění přemístí na vyšší prvek, takže pomocí této funkce můžeme použít režim Xiangyuan. Můžeme sledovat události rodičovských prvků těchto podobných prvků a poté určit, který podřízený prvek má spuštěnou událost, než budeme pokračovat v dalších operacích.
Zde jako příklad spojíme metody bind/unbind v jQuery.
HTML:
JavaScript:
Příklad 2: Použijte režim Xiangyuan pro zlepšení výkonu
Další příklad, stále související s jQuery, obecně používáme element objekt v callback funkci události, často používáme tvar $(this), který ve skutečnosti opakovaně vytváří nový objekt, protože v callback funkci je to již DOM prvek, musíme použít následující kód:
Ve skutečnosti, pokud musíme použít něco jako $(this), můžeme také implementovat vlastní verzi vzoru pro jednotlivé instance, například můžeme implementovat funkci jako jQuery.signle(this), která vrátí samotný prvek DOM:
Jak používat:
Tím se vrátí samotný prvek DOM tak, jak je, bez vytvoření objektu jQuery.
shrnutí
Režim flyweight je režim, který zlepšuje efektivitu a výkon programu, což výrazně urychluje běh programu. Existuje mnoho aplikací: například pokud chcete číst sérii řetězců z databáze, z nichž mnohé jsou duplikáty, můžeme tyto řetězce uložit do Flyweight poolu.
Pokud aplikace používá velké množství objektů a tyto velké množství objektů způsobují velkou spokojenost s úložištěm, měla by zvážit použití režimu sdílení; Pokud smažete vnější stav objektu, můžete nahradit mnoho skupin objektů relativně malým počtem sdílených objektů a můžete zvážit použití režimu Xiangyuan.
Referenční adresa:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Předchozí:Doporučte 3 weby pro hledání ikon ikonDalší:PočetČekajícíZpráv, Zprávy ve frontě, Zprávy...
|