See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 9589|Vastuse: 0

[JavaScript] Saad põhjaliku ülevaate Javascrip{filter}t-st: disainimustri meta-režiimist

[Kopeeri link]
Postitatud 30.07.2018 10:30:45 | | |
Sissejuhatus

Flyweight režiim toetab tõhusalt suurt hulka peeneteralisi objekte, kasutades jagamistehnoloogiat, vältides paljude sama sisuga väikeste klasside (näiteks mälutarbimise) koormust ning võimaldades kõigil jagada klassi (meta-klass).

Programmeerimises on mõnikord vajalik toota suur hulk peeneteralisi klassi instantse, et andmeid esindada, ja kui leiate, et nende eksemplaride üldkoormus on põhimõtteliselt sama, välja arvatud mõned parameetrid, võib klasside arv, mida tuleb instantsida, oluliselt väheneda. Kui suudad need parameetrid viia klassi eksemplarist väljapoole ja edastada need metoodi kutsumisel, saad üksikute eksemplaride arvu oluliselt vähendada jagamisega.

Mis siis, kui rakendad JavaScriptis meta-režiimi? On kaks võimalust: esimene rakendatakse andmekihile, peamiselt suurele hulgale sarnastele objektidele mälus; Teine rakendatakse DOM-kihile, mida saab kasutada keskse sündmuste halduris, et vältida sündmuste käepidemete lisamist iga lapseelemendiga vanemkonteineris.

Naudi metaversumit ja andmekihte

Flyweightis on kaks olulist mõistet – sisemine olek sisemine ja väline olek ekstrinsne, sisemist olekut hallatakse objektis sisemiste meetoditega ning välist informatsiooni saab kustutada või salvestada väliselt.

Otse öeldes on see esmalt originaalmudeli näpistamine, seejärel erinevate olukordade ja keskkondade puhul ning seejärel konkreetsete mudelite loomine oma omadustega, loomulikult tuleb siin genereerida erinevaid uusi objekte, nii et tehase režiim ilmub sageli lendkaalu režiimis, lendkaalu sisemist olekut kasutatakse jagamiseks ning kärbsekaalu tehas vastutab lendkaalu kogumi (mustrikogu) hoidmise eest sisemise oleku objektide salvestamiseks.

Kasuta Yuanyuani režiimi

Näitame, et kui meil oleks raamatukogu, mis haldaks kõiki raamatuid, näeks iga raamatu metaandmed esialgu välja järgmised:

ID
Pealkiri
Autor
Žanr
Lehekülgede arv
Kirjastaja ID
ISBN

Samuti peame määratlema, millal ja kelle poolt iga raamat laenutati, samuti tagastamiskuupäeva ja saadavuse:

VäljavaadeKuupäev
checkoutLiige
dueReturnDate
Saadavus

Kuna raamatu objekt on seatud järgmisele koodile, tuleb märkida, et kood pole veel optimeeritud:


Alguses võib programm olla korras, kuid aja jooksul võib raamatute arv suures koguses kasvada ning igal raamatul on erinev versioon ja kogus, mistõttu süsteem muutub järjest aeglasemaks. Tuhandeid raamatuesemeid mälus saab ette kujutada ja me peame neid optimeerima jagamisrežiimiga.

Andmeid saab jagada kaheks tüübiks: sisemisteks ja välisteks, ning raamatu objektiga seotud andmed (pealkiri, autor jne) saab omistada sisemistele atribuutidele, samas kui (checkoutMember, dueReturnDate jne) saab omistada välistele atribuutidele. Nii saab järgmine kood jagada sama objekti samas raamatus, sest ükskõik kes raamatu laenab, kui raamat on sama raamat, on põhiinfo sama:



Määratle põhitehas

Defineerime lihtsa tehase, mis kontrollib, kas raamatu objekt on varem loodud, tagastame, kui on, ja taasloome ning salvestame, kui mitte, mis tagab, et loome iga raamatutüübi jaoks ainult ühe objekti:



Välise staatuse haldamine


Väline olek on suhteliselt lihtne, välja arvatud raamat, mille me kapseldasime, tuleb kõik muu siin hallata:



Nii saame salvestada sama raamatu info raamatuhalduri objekti ja ainult ühe eksemplari; Võrreldes eelmise koodiga on näha, et palju mälu on salvestatud.

Naudi meta-režiimi ja DOM-i


Ma ei hakka siin DOM-i mullitamise juhtumist palju rääkima, usun, et kõik juba teavad, toome kaks näidet.

Näide 1: Tsentraliseeritud intsidentide haldus
Näiteks, kui meil on palju sarnaseid elemente või struktuure (näiteks menüüd või mitu li-d ul-is), mis peavad jälgima tema klõpsusündmust, siis peame iga elemendi siduma sündmuse sidumiseks, kui elemente on väga, väga palju, siis saab ette kujutada jõudlust, ja koos mullitamise teadmisega, kui mõnel lapselemendil on sündmuse käivitaja, siis sündmus mullitab kõrgemale elemendile pärast käivitumist, nii et selle funktsiooni abil saame kasutada Xiangyuani režiimi. Saame jälgida nende sarnaste elementide vanemelementide sündmusi ja seejärel määrata, millisel lapselemendil on sündmus käivitunud, enne kui jätkame edasisi operatsioone.

Siin kombineerime jQuery bind/unbind meetodid näitena.

HTML:



JavaScript:



Näide 2: Rakenda Xiangyuani režiimi jõudluse parandamiseks

Teine näide, mis on endiselt seotud jQueryga, kasutame tavaliselt elementi objekti sündmuse tagasikutsumise funktsioonis, sageli kasutame vormi $(this), tegelikult loob see korduvalt uue objekti, sest see callback-funktsioonis on juba DOM-element ise, peame kasutama järgmist koodi:



Tegelikult, kui peame kasutama midagi nagu $(this), saame rakendada ka oma versiooni ühe-instantsu mustrist, näiteks saame rakendada funktsiooni nagu jQuery.signle(this), mis tagastab DOM-elemendi enda:



Kuidas kasutada:



See tagastab DOM-elemendi enda sellisena, nagu see on, ilma et looks jQuery objekti.

Kokkuvõte


Flyweight režiim on režiim, mis parandab programmi efektiivsust ja jõudlust, mis kiirendab oluliselt programmi töökiirust. Rakendusi on palju: näiteks kui soovid lugeda andmebaasist stringide seeriat, millest paljud on duplikaadid, siis saame need stringid salvestada Flyweight basseini.

Kui rakendus kasutab suurt hulka objekte ja see suur hulk tekitab palju salvestuskogemust, peaks ta kaaluma jagamisrežiimi kasutamist; Kui kustutada objekti välise oleku, saab asendada palju objektigruppe suhteliselt väheste jagatud objektidega ning kaaluda Xiangyuani režiimi kasutamist.

Viiteaadress:http://www.addyosmani.com/resour ... ok/#detailflyweight





Eelmine:Soovita 3 veebilehte, kust leida ikoonide ikoone
Järgmine:OotelSõnumite Arv, SõnumidJärjekorras, Sõnum...
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com