Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 9589|Atbildi: 0

[JavaScript] Iegūstiet padziļinātu izpratni par Javascrip{filter}t: noformējuma modeļa meta-režīmu

[Kopēt saiti]
Publicēts 30.07.2018 10:30:45 | | |
Ievads

Flyweight režīms efektīvi atbalsta lielu skaitu smalkgraudainu objektu, palaižot koplietošanas tehnoloģiju, izvairoties no liela skaita mazu klašu ar vienādu saturu (piemēram, atmiņas patēriņa) un ļaujot ikvienam koplietot klasi (meta-klase).

Programmēšanā dažreiz ir nepieciešams izveidot lielu skaitu smalkgraudainu klašu instancēm, lai attēlotu datus, un, ja jūs varat konstatēt, ka šiem gadījumiem būtībā ir vienādas pieskaitāmās izmaksas, izņemot dažus parametrus, to klašu skaitu, kas jāinstancē, var ievērojami samazināt. Ja šos parametrus var pārvietot ārpus klases instances un nodot tiem, kad tiek izsaukta metode, koplietojot var ievērojami samazināt atsevišķu gadījumu skaitu.

Tātad, ko darīt, ja JavaScript izmantojat meta režīmu? Ir divi veidi, pirmais tiek piemērots datu slānim, galvenokārt lielam skaitam līdzīgu objektu atmiņā; Otrais tiek lietots DOM slānim, ko var izmantot centrālajā notikumu pārvaldniekā, lai izvairītos no notikumu turu pievienošanas katram bērna elementam vecākkonteinerā.

Izbaudiet metaversu un datu slāņus

Flyweight ir divi svarīgi jēdzieni - iekšējais stāvoklis iekšējais un ārējais stāvoklis, iekšējais stāvoklis tiek pārvaldīts objektā, izmantojot iekšējās metodes, un ārējo informāciju var izdzēst vai saglabāt ārēji.

Atklāti sakot, vispirms ir jāsaspiež oriģinālais modelis un pēc tam ar dažādiem gadījumiem un vidēm, un pēc tam jāražo konkrēti modeļi ar savām īpašībām, acīmredzot šeit ir jāģenerē dažādi jauni objekti, tāpēc rūpnīcas režīms bieži parādās Flyweight režīmā, Flyweight iekšējais stāvoklis tiek izmantots, lai dalītos, un Flyweight rūpnīca ir atbildīga par Flyweight baseina (modeļa baseina) uzturēšanu, lai uzglabātu iekšējā stāvokļa objektus.

Izmantojiet Yuanyuan režīmu

Parādīsim, ka, ja mums būtu bibliotēka, lai pārvaldītu visas grāmatas, katras grāmatas metadati provizoriski izskatītos šādi:

ID
Nosaukums
Autors
Žanrs
Lappušu skaits
Izdevēja ID
ISBN

Mums ir arī jādefinē, kad un kas katru grāmatu paņēma, kā arī atgriešanas datumu un pieejamību:

izrakstīšanās datums
checkoutDalībnieks
atmaksas datums
Pieejamība

Tā kā grāmatas objektam ir iestatīts šāds kods, ņemiet vērā, ka kods vēl nav optimizēts:


Programma sākumā var būt laba, bet laika gaitā grāmatu skaits var palielināties lielos daudzumos, un katrai grāmatai ir atšķirīga versija un daudzums, un jūs atradīsit, ka sistēma kļūst lēnāka un lēnāka. Var iedomāties tūkstošiem grāmatu objektu atmiņā, un mums tie ir jāoptimizē ar koplietošanas režīmu.

Mēs varam sadalīt datus divu veidu datos: iekšējos un ārējos, un datus, kas saistīti ar grāmatas objektu (nosaukums, autors utt.), var attiecināt uz iekšējiem atribūtiem, bet (checkoutMember, dueReturnDate utt.) var attiecināt uz ārējiem atribūtiem. Tādā veidā šāds kods var koplietot vienu un to pašu objektu vienā grāmatā, jo neatkarīgi no tā, kurš aizņemas grāmatu, kamēr grāmata ir viena un tā pati grāmata, pamatinformācija ir vienāda:



Definējiet pamata rūpnīcu

Definēsim pamata rūpnīcu, lai pārbaudītu, vai grāmatas objekts ir izveidots iepriekš, atgrieztos, ja tāds ir, un atjaunotu un saglabātu to, ja nē, kas nodrošina, ka mēs izveidojam objektu tikai katram grāmatas veidam:



Ārējā statusa pārvaldība


Ārējais stāvoklis ir salīdzinoši vienkāršs, izņemot grāmatu, ko mēs iekapsulējām, viss pārējais ir jāpārvalda šeit:



Tādā veidā mēs varam saglabāt to pašu informāciju par to pašu grāmatu grāmatpārvaldnieka objektā un tikai vienu eksemplāru; Salīdzinot ar iepriekšējo kodu, var konstatēt, ka tiek ietaupīts daudz atmiņas.

Izbaudiet meta režīmu un DOM


Es šeit daudz neteikšu par DOM burbuļošanas incidentu, es uzskatu, ka visi jau zina, sniegsim divus piemērus.

1. piemērs: centralizēta incidentu pārvaldība
Piemēram, ja mums ir daudz līdzīgu elementu vai struktūru veidu (piemēram, izvēlnes vai vairāki li ul), kuriem ir jāuzrauga viņa klikšķa notikums, tad mums ir jāsaista katrs vēl viens elements notikumu saistīšanai, ja ir ļoti, ļoti daudz elementu, tad veiktspēju var iedomāties, un apvienojumā ar zināšanām par burbuļošanu, ja kādam bērna elementam ir notikuma trigers, tad notikums pēc aktivizēšanas burbuļos uz augstāko elementu, tāpēc, izmantojot šo funkciju, mēs varam izmantot Xiangyuan režīmu. Mēs varam uzraudzīt šo līdzīgo elementu vecākelementu notikumus un pēc tam noteikt, kuram pakārtotajam elementam ir aktivizēts notikums, pirms turpināt turpmākās darbības.

Šeit mēs apvienosim jQuery saistīšanas / atsaistīšanas metodes kā piemēru.

HTML:



JavaScript:



2. piemērs: Xiangyuan režīma lietošana, lai uzlabotu veiktspēju

Vēl viens piemērs, kas joprojām ir saistīts ar jQuery, parasti mēs izmantojam elementa objektu notikuma atzvanīšanas funkcijā, mēs bieži izmantojam formu $(this), patiesībā tas atkārtoti rada jaunu objektu, jo tas atzvanīšanas funkcijā jau ir pats DOM elements, mums jāizmanto šāds kods:



Faktiski, ja mums ir jāizmanto kaut kas līdzīgs $(this), mēs varam arī ieviest savu vienas instances modeļa versiju, piemēram, mēs varam ieviest tādu funkciju kā jQuery.signle(this), lai atgrieztu pašu DOM elementu:



Kā lietot:



Tādējādi tiek atgriezts pats DOM elements tāds, kāds tas ir, neizveidojot jQuery objektu.

Kopsavilkuma


Lidojuma svara režīms ir režīms, kas uzlabo programmas efektivitāti un veiktspēju, kas ievērojami paātrinās programmas darbības ātrumu. Ir daudz lietojumprogrammu: piemēram, ja vēlaties lasīt virkni virkņu no datu bāzes, no kurām daudzas ir dublikāti, tad mēs varam saglabāt šīs virknes Flyweight baseinā.

Ja lietojumprogramma izmanto lielu skaitu objektu un šis lielais objektu skaits rada lielu krātuves laimi, tai jāapsver koplietošanas režīma izmantošana; Ja izdzēšat objekta ārējo stāvokli, daudzas objektu grupas var aizstāt ar salīdzinoši maz koplietojamu objektu, un varat apsvērt iespēju izmantot Xiangyuan režīmu.

Atsauces adrese:http://www.addyosmani.com/resour ... ok/#detailflyweight





Iepriekšējo:Iesakiet 3 vietnes, lai atrastu ikonu ikonas
Nākamo:NumberOfPendingMessages, MessagesEnqueued, Messag...
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com