Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 9589|Svare: 0

[JavaScript] Få en inngående forståelse av Javascrip{filter}t: meta-modusen til designmønsteret

[Kopier lenke]
Publisert på 30.07.2018 10:30:45 | | |
Introduksjon

Flyweight-modus støtter effektivt et stort antall finkornede objekter ved å kjøre delingsteknologi, unngå overhead ved et stort antall små klasser med samme innhold (som å bruke minne), og la alle dele en klasse (meta-klasse).

I programmering er det noen ganger nødvendig å produsere et stort antall finkornede klasseinstanser for å representere data, og hvis du kan finne at disse instansene har stort sett samme overhead bortsett fra noen få parametere, kan antallet klasser som må instansieres reduseres betydelig. Hvis du kan flytte disse parameterne utenfor klasseinstansen og sende dem inn når metoden kalles, kan du redusere antall individuelle instanser betydelig ved å dele.

Hva om du bruker meta-modus i JavaScript? Det finnes to måter, den første anvendes på datalaget, hovedsakelig på et stort antall lignende objekter i minnet; Den andre brukes på DOM-laget, som kan brukes på den sentrale hendelsesbehandleren for å unngå å knytte hendelseshåndtak til hvert barneelement i foreldrecontaineren.

Nyt metaverset og datalagene

Det finnes to viktige konsepter i Flyweight – intern tilstand intrinsisk og ekstern tilstand ekstrinsisk, intern tilstand håndteres i objektet gjennom interne metoder, og ekstern informasjon kan slettes eller lagres eksternt.

For å si det rett ut, det er først å plukke en original modell, og deretter med ulike anledninger og miljøer, og deretter produsere spesifikke modeller med egne egenskaper, åpenbart må nye objekter genereres her, så fabrikkmodusen dukker ofte opp i Flyweight-modusen, den interne tilstanden til Flyweight brukes til deling, og Flyweight-fabrikken er ansvarlig for å opprettholde en Flyweight-pool (mønsterpool) for å lagre objektene i den interne tilstanden.

Bruk Yuanyuan-modusen

La oss demonstrere at hvis vi hadde et bibliotek til å administrere alle bøkene, ville metadataene for hver bok foreløpig se slik ut:

ID
Tittel
Forfatter
Sjanger
Sidetall
Utgiver-ID
ISBN

Vi må også definere når og av hvem hver bok ble lånt, samt returdato og tilgjengelighet:

utsjekkdato
sjekk utMedlem
forfallReturndato
Tilgjengelighet

Siden book-objektet er satt til følgende kode, merk at koden ennå ikke er optimalisert:


Programmet kan være greit i starten, men over tid kan antallet bøker øke i store mengder, og hver bok har en forskjellig versjon og antall, og du vil oppdage at systemet blir tregere og tregere. Tusenvis av bokobjekter i minnet kan forestilles, og vi må optimalisere dem med delingsmodus.

Vi kan dele dataene inn i to typer data: interne og eksterne, og dataene knyttet til bokobjektet (tittel, forfatter, osv.) kan tilskrives interne attributter, mens (checkoutMember, dueReturnDate, osv.) kan tilskrives eksterne attributter. På denne måten kan følgende kode dele samme objekt i samme bok, fordi uansett hvem som låner boken, så lenge boken er den samme boken, er grunninformasjonen den samme:



Definer den grunnleggende fabrikken

La oss definere en enkel fabrikk for å sjekke om objektet i boken ble laget før, returnere hvis det finnes, og gjenskape og lagre det hvis ikke, noe som sikrer at vi kun lager et objekt for hver type bok:



Administrer ekstern status


Den ytre tilstanden er relativt enkel, bortsett fra boken vi har innkapslet, alt annet må håndteres her:



På denne måten kan vi lagre den samme informasjonen fra den samme boken i et bookmanager-objekt, og bare én kopi; Sammenlignet med den forrige koden kan man finne at mye minne lagres.

Nyt meta-modusen og DOM


Jeg skal ikke si så mye om DOM-bobling-hendelsen her, jeg tror alle allerede vet det, la oss gi to eksempler.

Eksempel 1: Sentralisert hendelseshåndtering
For eksempel, hvis vi har mange lignende typer elementer eller strukturer (som menyer, eller flere li i ul) som må overvåke klikkhendelsen hans, må vi binde hvert element til for hendelsesbinding, hvis det er veldig, veldig mange elementer, kan ytelsen forestilles, og kombinert med kunnskapen om bobling, hvis et barneelement har en hendelsesutløser, vil hendelsen boble til det høyere elementet etter utløsning, så ved å bruke denne funksjonen kan vi bruke Xiangyuan-modusen. Vi kan overvåke hendelsene til foreldreelementene til disse lignende elementene, og deretter avgjøre hvilket barneelement som har en hendelse utløst før vi fortsetter med videre operasjoner.

Her vil vi kombinere jQuerys bind/unbind-metoder som et eksempel.

HTML:



JavaScript:



Eksempel 2: Bruk Xiangyuan-modusen for å forbedre ytelsen

Et annet eksempel, fortsatt relatert til jQuery, vanligvis bruker vi elementobjektet i callback-funksjonen til hendelsen, vi bruker ofte formen $(this), faktisk opprettes det gjentatte ganger et nytt objekt, fordi dette i callback-funksjonen allerede er DOM-elementet selv, vi må bruke følgende kode:



Faktisk, hvis vi må bruke noe som $(this), kan vi også implementere vår egen versjon av enkeltinstans-mønsteret, for eksempel kan vi implementere en funksjon som jQuery.signle(this) for å returnere selve DOM-elementet:



Slik bruker du:



Dette returnerer selve DOM-elementet som det er, uten å opprette et jQuery-objekt.

sammendrag


Flyweight-modus er en modus som forbedrer effektiviteten og ytelsen til programmet, noe som vil øke kjørehastigheten betydelig. Det finnes mange bruksområder: for eksempel, hvis du vil lese en serie strenger fra en database, hvorav mange er duplikater, kan vi lagre disse strengene i en Flyweight-pool.

Hvis en applikasjon bruker et stort antall objekter, og dette store antallet objekter gir mye lagringsglede, bør den vurdere å bruke delingsmodus; Hvis du sletter objektets eksterne tilstand, kan du erstatte mange grupper av objekter med relativt få delte objekter, og du kan vurdere å bruke Xiangyuan-modus.

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





Foregående:Anbefal 3 nettsteder for å finne ikonikoner
Neste:AntalAvPendMeldinger, MeldingerKø, Meldinger...
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com