Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 9589|Antwoord: 0

[JavaScript] Krijg een diepgaand begrip van Javascrip{filter}t: de meta-modus van het ontwerppatroon

[Link kopiëren]
Geplaatst op 30-07-2018 10:30:45 | | |
Introductie

De Flyweight-modus ondersteunt effectief een groot aantal fijnmazige objecten door deeltechnologie te draaien, waardoor de overhead van een groot aantal kleine klassen met dezelfde inhoud (zoals geheugenverbruik) wordt vermeden, en iedereen een klasse kan delen (meta-klasse).

In programmeren is het soms nodig om een groot aantal fijnkorrelige klasse-instanties te produceren om data te representeren, en als je kunt ontdekken dat deze instanties in wezen dezelfde overhead hebben behalve enkele parameters, kan het aantal klassen dat moet worden geïnstantieerd sterk worden verminderd. Als je die parameters buiten de klasse-instantie kunt verplaatsen en doorgeven wanneer de methode wordt aangeroepen, kun je het aantal individuele instanties aanzienlijk verminderen door te delen.

Wat maakt het uit als je de meta-modus in JavaScript toepast? Er zijn twee manieren: de eerste wordt toegepast op de datalaag, voornamelijk op een groot aantal vergelijkbare objecten in het geheugen; De tweede wordt toegepast op de DOM-laag, die op de centrale event manager kan worden gebruikt om te voorkomen dat event handles aan elk kindelement in de oudercontainer worden gekoppeld.

Geniet van metaverse en datalagen

Er zijn twee belangrijke concepten in Flyweight: interne toestand intrinsiek en externe toestand extrinsiek, interne toestand wordt in het object beheerd via interne methoden, en externe informatie kan extern worden verwijderd of opgeslagen.

Om het duidelijk te zeggen: eerst knijpen van een origineel model, dan met verschillende situaties en omgevingen, en vervolgens specifieke modellen met hun eigen kenmerken produceren; uiteraard moeten hier verschillende nieuwe objecten worden gegenereerd, dus de fabrieksmodus verschijnt vaak in de Flyweight-modus, wordt de interne toestand van het Flyweight gebruikt om te delen, en de Flyweight-fabriek is verantwoordelijk voor het onderhouden van een Flyweight-pool (patroonpool) om de objecten van de interne toestand op te slaan.

Gebruik de Yuanyuan-modus

Laten we aantonen dat als we een bibliotheek hadden om alle boeken te beheren, de metadata voor elk boek er voorlopig zo uit zou zien:

ID
Titel
Auteur
Genre
Paginatelling
Uitgever-ID
ISBN

We moeten ook definiëren wanneer en door wie elk boek is uitgeleend, evenals de retourdatum en beschikbaarheid:

Afrekendatum
checkoutLid
verduTerugDatum
Beschikbaarheid

Omdat het book-object op de volgende code is ingesteld, let op dat de code nog niet is geoptimaliseerd:


Het programma kan in het begin prima zijn, maar na verloop van tijd kan het aantal boeken in grote hoeveelheden toenemen, en elk boek heeft een andere versie en aantal, en je zult merken dat het systeem steeds trager wordt. Duizenden boekobjecten in het geheugen kunnen worden voorgesteld, en we moeten ze optimaliseren met de deelmodus.

We kunnen de data opdelen in twee soorten data: intern en extern, en de gegevens die gerelateerd zijn aan het boekobject (titel, auteur, enz.) kunnen worden toegeschreven aan interne attributen, terwijl (checkoutMember, dueReturnDate, enz.) aan externe attributen kan worden toegeschreven. Op deze manier kan de volgende code hetzelfde object in hetzelfde boek delen, want ongeacht wie het boek leent, zolang het boek hetzelfde boek is, blijft de basisinformatie hetzelfde:



Definieer de basisfabriek

Laten we een basisfabriek definiëren om te controleren of het object van het boek eerder is gemaakt, terug te komen als dat zo is, en het opnieuw te creëren en op te slaan als dat niet zo is, wat ervoor zorgt dat we alleen een object maken voor elk type boek:



Beheer externe status


De externe toestand is relatief eenvoudig, behalve het boek dat we hebben samengevat, alles wat hier verder is, moet hier worden beheerd:



Op deze manier kunnen we dezelfde informatie van hetzelfde boek opslaan in een bookmanager-object, en slechts één exemplaar; In vergelijking met de vorige code is er veel geheugen opgeslagen.

Geniet van de meta-modus en DOM


Ik zal hier niet veel zeggen over het DOM-bubbling-incident, ik geloof dat iedereen het al weet, laten we twee voorbeelden geven.

Voorbeeld 1: Gecentraliseerd incidentbeheer
Als we bijvoorbeeld veel vergelijkbare soorten elementen of structuren hebben (zoals menu's, of meerdere li in ul) die zijn klikgebeurtenis moeten monitoren, dan moeten we elk extra element binden voor gebeurtenisbinding; als er heel, heel veel elementen zijn, dan kan de prestatie worden voorgesteld, en gecombineerd met de kennis van bubbling, als een kindelement een gebeurtenistrigger heeft, zal het event na het triggeren naar het hogere element bubbelen, dus met deze functie kunnen we de Xiangyuan-modus gebruiken. We kunnen de gebeurtenissen van de ouder-elementen van deze vergelijkbare elementen monitoren en vervolgens bepalen welk kind-element een gebeurtenis heeft geactiveerd voordat we verder gaan met de bewerkingen.

Hier combineren we de bind/unbind-methoden van jQuery als voorbeeld.

HTML:



JavaScript:



Voorbeeld 2: Pas de Xiangyuan-modus toe om de prestaties te verbeteren

Een ander voorbeeld, nog steeds gerelateerd aan jQuery, over het algemeen gebruiken we het elementobject in de callback-functie van het evenement, we gebruiken vaak de vorm $(this), in feite wordt herhaaldelijk een nieuw object aangemaakt, omdat dit in de callbackfunctie al het DOM-element zelf is, we moeten de volgende code gebruiken:



Als we iets als $(this) moeten gebruiken, kunnen we ook onze eigen versie van het single-instance patroon implementeren, bijvoorbeeld een functie zoals jQuery.signle(this) om het DOM-element zelf terug te geven:



Hoe te gebruiken:



Dit geeft het DOM-element zelf terug zoals het is, zonder een jQuery-object aan te maken.

samenvatting


Flyweight-modus is een modus die de efficiëntie en prestaties van het programma verbetert, waardoor de loopsnelheid van het programma aanzienlijk wordt versneld. Er zijn veel toepassingen: bijvoorbeeld, als je een reeks strings uit een database wilt lezen, waarvan veel duplicaten zijn, dan kunnen we deze strings opslaan in een Flyweight-pool.

Als een applicatie een groot aantal objecten gebruikt, en dit grote aantal objecten zorgt voor veel opslaggeluk, zou het de deelmodus moeten overwegen; Als je de externe toestand van het object verwijdert, kun je veel groepen objecten vervangen door relatief weinig gedeelde objecten, en kun je overwegen de Xiangyuan-modus te gebruiken.

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





Vorig:Beveel 3 websites aan om iconen te vinden
Volgend:AantalAfPendingBerichten, BerichtenInlineer, Bericht...
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com