|
|
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 vindenVolgend:AantalAfPendingBerichten, BerichtenInlineer, Bericht...
|