|
|
Objavljeno na 30. 07. 2018 10:30:45
|
|
|

Uvod
Flyweight način učinkovito podpira veliko število drobnozrnatih objektov z uporabo tehnologije deljenja, s čimer se izogne obremenitvam velikega števila majhnih razredov z isto vsebino (kot je porabo pomnilnika) in omogoča vsem deljenje razreda (meta-razred).
V programiranju je včasih potrebno ustvariti veliko število finozrnatih instanc razredov za predstavitev podatkov, in če ugotovite, da imajo ti primeri praktično enak režijski strošek, razen nekaj parametrov, se lahko število razredov, ki jih je treba instancirati, močno zmanjša. Če lahko te parametre premaknete izven instance razreda in jih posredujete, ko je metoda poklicana, lahko z deljenjem močno zmanjšate število posameznih instanc.
Kaj pa, če uporabite meta način v JavaScriptu? Obstajata dva načina, prvi se uporablja na podatkovni plasti, predvsem na velikem številu podobnih objektov v pomnilniku; Drugo se uporablja na DOM plasti, ki jo je mogoče uporabiti na osrednjem upravitelju dogodkov, da se prepreči pripenjanje ročajev dogodkov na vsak podredni element v nadrejeni vsebniki.
Uživajte v metaverse in podatkovnih plasteh
V Flyweightu obstajata dva pomembna pojma – notranje stanje intrinzično in zunanje stanje, notranje stanje se upravlja v objektu z notranjimi metodami, zunanje informacije pa je mogoče izbrisati ali shraniti zunaj.
Če povem naravnost, najprej je treba ukrasti originalni model, nato pa ob različnih priložnostih in okoljih, ter nato izdelati specifične modele z lastnimi značilnostmi, seveda je tukaj treba generirati različne nove objekte, zato se tovarniški način pogosto pojavi v načinu Flyweight, notranje stanje Flyweighta se uporablja za deljenje, tovarna Flyweight pa je odgovorna za vzdrževanje bazena Flyweight (vzorčni bazen) za shranjevanje objektov notranjega stanja.
Uporabi način Yuanyuan
Pokažajmo, da bi v primeru knjižnice za upravljanje vseh knjig metapodatki za vsako knjigo začasno izgledali takole:
ID Naslov Avtor Žanr Število strani ID založnika ISBN Prav tako moramo določiti, kdaj in kdo je izposodil vsako knjigo, pa tudi datum vračila in razpoložljivost:
Datum odhoda checkoutMember dueReturnDate Razpoložljivost Ker je objekt knjige nastavljen na naslednjo kodo, upoštevajte, da koda še ni optimizirana:
Program je morda sprva v redu, a sčasoma se lahko število knjig poveča v velikih količinah, vsaka knjiga ima svojo različico in količino, zato boste ugotovili, da sistem postaja vse počasnejši. Na tisoče knjižnih objektov v pomnilniku si lahko predstavljamo in jih moramo optimizirati z načinom deljenja.
Podatke lahko razdelimo na dve vrsti podatkov: notranje in zunanje, podatki, povezani s knjižnim objektom (naslov, avtor itd.), pa lahko pripišemo notranjim atributom, medtem ko (checkoutMember, dueReturnDate itd.) pripišemo zunanjim atributom. Na ta način lahko naslednja koda deli isti objekt v isti knjigi, saj ne glede na to, kdo si knjigo izposodi, dokler je knjiga ista knjiga, so osnovne informacije enake:
Opredelite osnovno tovarno
Definirajmo osnovno tovarno, da preverimo, ali je bil objekt knjige ustvarjen prej, vrnemo, če obstaja, in ga ponovno ustvarimo ter shranimo, če ni, kar zagotavlja, da ustvarimo objekt samo za vsako vrsto knjige:
Upravljanje zunanjega statusa
Zunanje stanje je razmeroma preprosto, razen knjige, ki smo jo zajeli, vse ostalo je treba tukaj upravljati:
Na ta način lahko shranimo iste informacije iste knjige v objekt bookmanagerja in le eno kopijo; V primerjavi s prejšnjo kodo je mogoče ugotoviti, da se prihrani veliko pomnilnika.
Uživaj v meta načinu in DOM
O incidentu z mehurčki DOM tukaj ne bom veliko govoril, verjamem, da vsi že vedo, dajmo dva primera.
Primer 1: Centralizirano upravljanje incidentov Na primer, če imamo veliko podobnih vrst elementov ali struktur (kot so meniji ali več li v ul), ki morajo spremljati njegov klik dogodek, potem moramo vsak element povezati za vezavo dogodkov; če je elementov zelo, zelo veliko, si lahko predstavljamo zmogljivost, in v kombinaciji z znanjem o mehurčkih, če ima kateri koli otroški element sprožilec dogodka, se dogodek po sprožitvi spremeni v višji element, zato lahko s to funkcijo uporabimo način Xiangyuan. Lahko spremljamo dogodke nadrejevalnih elementov teh podobnih elementov in nato določimo, kateri otrok ima sprožen dogodek, preden nadaljujemo z nadaljnjimi operacijami.
Tukaj bomo kot primer združili metode bind/unbind v jQuery.
HTML:
JavaScript:
Primer 2: Uporabite način Xiangyuan za izboljšanje zmogljivosti
Še en primer, še vedno povezan z jQuery, na splošno uporabljamo element object v callback funkciji dogodka, pogosto uporabljamo obliko $(this), dejansko večkrat ustvari nov objekt, ker je ta v callback funkciji že sam DOM element, moramo uporabiti naslednjo kodo:
Pravzaprav, če moramo uporabiti nekaj kot $(this), lahko implementiramo tudi svojo različico enojnega vzorca, na primer lahko implementiramo funkcijo, kot je jQuery.signle(this), ki vrne sam element DOM:
Kako uporabljati:
To vrne sam element DOM takšen, kot je, brez ustvarjanja objekta jQuery.
Povzetek
Način flyweight je način, ki izboljša učinkovitost in zmogljivost programa, kar močno pospeši hitrost izvajanja programa. Obstaja veliko aplikacij: na primer, če želite prebrati niz nizov iz baze podatkov, od katerih je veliko podvojenih, lahko te nize shranimo v Flyweight pool.
Če aplikacija uporablja veliko število objektov in ti številni objekti povzročajo veliko zadovoljstva s shranjevanjem, naj razmisli o uporabi načina deljenja; Če izbrišete zunanje stanje objekta, lahko zamenjate veliko skupin objektov z razmeroma malo deljenih objektov, in lahko razmislite o uporabi načina Xiangyuan.
Referenčni naslov:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Prejšnji:Priporočam 3 spletne strani za iskanje ikon ikonNaslednji:ŠteviloČakajočih sporočil, sporočil v vrsti, sporočil...
|