Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 9589|Odgovoriti: 0

[JavaScript] Pridobite poglobljeno razumevanje Javascrip{filter}t: meta-načina oblikovalskega vzorca

[Kopiraj povezavo]
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 ikon
Naslednji:ŠteviloČakajočih sporočil, sporočil v vrsti, sporočil...
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com