Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 9589|Atsakyti: 0

[JavaScript] Įgykite išsamų supratimą apie Javascrip{filter}t: dizaino modelio metarežimą

[Kopijuoti nuorodą]
Paskelbta 2018-07-30 10:30:45 | | |
Įvadas

"Flyweight" režimas efektyviai palaiko daugybę smulkiagrūdžių objektų, paleisdamas dalijimosi technologiją, išvengdamas daugybės mažų klasių su tuo pačiu turiniu (pvz., atminties suvartojimo) ir leisdamas visiems dalytis klase (meta-klase).

Programuojant kartais reikia sukurti daug smulkiagrūdžių klasių egzempliorių, kad būtų galima atvaizduoti duomenis, ir jei pastebėsite, kad šie egzemplioriai iš esmės turi tas pačias pridėtines išlaidas, išskyrus kelis parametrus, klasių, kurias reikia sukurti, skaičių galima labai sumažinti. Jei galite perkelti šiuos parametrus už klasės egzemplioriaus ribų ir perduoti juos iškviečiant metodą, galite žymiai sumažinti atskirų egzempliorių skaičių bendrindami.

Taigi, ką daryti, jei pritaikysite meta režimą "JavaScript"? Yra du būdai, pirmasis taikomas duomenų sluoksniui, daugiausia daugybei panašių objektų atmintyje; Antrasis taikomas DOM sluoksniui, kurį galima naudoti centrinėje įvykių tvarkyklėje, kad nebūtų pridėtos įvykių rankenėlės prie kiekvieno antrinio elemento pirminiame konteineryje.

Mėgaukitės metavisata ir duomenų sluoksniais

Flyweight yra dvi svarbios sąvokos - vidinė būsena vidinė ir išorinė būsena, vidinė būsena objekte valdoma vidiniais metodais, o išorinė informacija gali būti ištrinta arba išsaugota išorėje.

Tiesiai šviesiai tariant, pirmiausia reikia suspausti originalų modelį, o paskui su skirtingomis progomis ir aplinka, o tada gaminti konkrečius modelius su savo ypatybėmis, akivaizdu, kad čia reikia generuoti skirtingus naujus objektus, todėl gamyklinis režimas dažnai pasirodo "Flyweight" režimu, dalijimuisi naudojama vidinė "Flyweight" būsena, o "Flyweight" gamykla yra atsakinga už "Flyweight" baseino (modelio baseino) priežiūrą vidinės būsenos objektams laikyti.

Naudokite Yuanyuan režimą

Parodykime, kad jei turėtume biblioteką, kuri tvarkytų visas knygas, kiekvienos knygos metaduomenys preliminariai atrodytų taip:

ID
Titulinis
Autorius
Žanras
Puslapių skaičius
Leidėjo ID
ISBN

Taip pat turime apibrėžti, kada ir kas paėmė kiekvieną knygą, taip pat grąžinimo datą ir prieinamumą:

atsiskaitymo data
checkoutMember
dueReturnDate
Prieinamumas

Kadangi knygos objektas nustatytas į šį kodą, atkreipkite dėmesį, kad kodas dar neoptimizuotas:


Iš pradžių programa gali būti gera, tačiau laikui bėgant knygų skaičius gali padidėti dideliais kiekiais, o kiekviena knyga turi skirtingą versiją ir kiekį, ir pastebėsite, kad sistema tampa vis lėtesnė. Galima įsivaizduoti tūkstančius knygų objektų atmintyje, ir mes turime juos optimizuoti naudodami dalijimosi režimą.

Duomenis galime suskirstyti į dviejų tipų duomenis: vidinius ir išorinius, o duomenys, susiję su knygos objektu (pavadinimas, autorius ir kt.), gali būti priskirti vidiniams atributams, o (checkoutMember, dueReturnDate ir kt.) gali būti priskirti išoriniams atributams. Tokiu būdu šis kodas gali dalytis tuo pačiu objektu toje pačioje knygoje, nes nesvarbu, kas skolinasi knygą, kol knyga yra ta pati knyga, pagrindinė informacija yra ta pati:



Apibrėžkite pagrindinę gamyklą

Apibrėžkime pagrindinę gamyklą, kad patikrintume, ar knygos objektas buvo sukurtas anksčiau, grąžinkime, jei yra, ir atkurkime bei išsaugokime, jei ne, o tai užtikrina, kad sukursime tik objektą kiekvienam knygos tipui:



Išorinės būsenos valdymas


Išorinė būsena yra gana paprasta, išskyrus knygą, kurią mes įtraukėme, visa kita turi būti valdoma čia:



Tokiu būdu knygų tvarkyklės objekte galime išsaugoti tą pačią tos pačios knygos informaciją ir tik vieną kopiją; Palyginti su ankstesniu kodu, galima pastebėti, kad sutaupoma daug atminties.

Mėgaukitės meta režimu ir DOM


Apie DOM burbuliavimo incidentą čia daug nepasakysiu, manau, kad visi jau žino, pateiksime du pavyzdžius.

1 pavyzdys: centralizuotas incidentų valdymas
Pavyzdžiui, jei turime daug panašių tipų elementų ar struktūrų (pvz., meniu arba kelis li ul), kuriems reikia stebėti jo paspaudimo įvykį, tada turime susieti kiekvieną kitą įvykio susiejimo elementą, jei yra labai, labai daug elementų, tada galima įsivaizduoti našumą ir kartu su žiniomis apie burbuliavimą, jei kuris nors antrinis elementas turi įvykio paleidiklį, tada suaktyvinus įvykis burbuliuos į aukštesnį elementą, todėl naudodamiesi šia funkcija galime naudoti Xiangyuan režimą. Galime stebėti šių panašių elementų pirminių elementų įvykius ir nustatyti, kuris antrinis elementas suaktyvintas prieš tęsdami tolesnes operacijas.

Čia kaip pavyzdį sujungsime "jQuery" susiejimo / atsiejimo metodus.

HTML:



JavaScript:



2 pavyzdys: taikykite Xiangyuan režimą, kad pagerintumėte našumą

Kitas pavyzdys, vis dar susijęs su "jQuery", paprastai įvykio atgalinio iškvietimo funkcijoje naudojame elemento objektą, dažnai naudojame formą $(tai), iš tikrųjų ji pakartotinai sukuria naują objektą, nes tai atgalinio skambinimo funkcijoje jau yra pats DOM elementas, turime naudoti šį kodą:



Tiesą sakant, jei turime naudoti kažką panašaus į $(this), taip pat galime įdiegti savo vieno egzemplioriaus modelio versiją, pavyzdžiui, galime įdiegti tokią funkciją kaip jQuery.signle(this), kad grąžintume patį DOM elementą:



Kaip naudoti:



Tai grąžina patį DOM elementą tokį, koks jis yra, nesukuriant jQuery objekto.

suvestinė


"Flyweight" režimas yra režimas, kuris pagerina programos efektyvumą ir našumą, o tai labai pagreitins programos veikimo greitį. Yra daugybė programų: pavyzdžiui, jei norite perskaityti eilučių seriją iš duomenų bazės, iš kurių daugelis yra dublikatai, šias eilutes galime saugoti "Flyweight" baseine.

Jei programa naudoja daug objektų ir šis didelis objektų skaičius sukelia daug saugyklos laimės, ji turėtų apsvarstyti galimybę naudoti bendrinimo režimą; Jei ištrinsite išorinę objekto būseną, daugelį objektų grupių galėsite pakeisti santykinai nedaug bendrai naudojamų objektų ir galite apsvarstyti galimybę naudoti Xiangyuan režimą.

Nuorodos adresas:http://www.addyosmani.com/resour ... ok/#detailflyweight





Ankstesnis:Rekomenduokite 3 svetaines, kuriose rasite piktogramų piktogramas
Kitą:NumberOfPendingMessages, MessagesEnqueued, Messag...
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com