|
|
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 ikonasNākamo:NumberOfPendingMessages, MessagesEnqueued, Messag...
|