|
|
Publié sur 30/07/2018 10:30:45
|
|
|

Introduction
Le mode Flyweight supporte efficacement un grand nombre d’objets à grains finis en exécutant une technologie de partage, évitant ainsi la surcharge d’un grand nombre de petites classes avec le même contenu (comme la consommation de mémoire), et permettant à chacun de partager une classe (méta-classe).
En programmation, il est parfois nécessaire de produire un grand nombre d’instances de classes à grain fin pour représenter les données, et si vous constatez que ces instances ont essentiellement la même surcharge sauf pour quelques paramètres, le nombre de classes à instancier peut être considérablement réduit. Si vous pouvez déplacer ces paramètres hors de l’instance de classe et les faire passer lorsque la méthode est appelée, vous pouvez considérablement réduire le nombre d’instances individuelles en partageant.
Et si vous appliquez le mode méta en JavaScript ? Il existe deux façons : la première est appliquée à la couche de données, principalement à un grand nombre d’objets similaires en mémoire ; La seconde est appliquée à la couche DOM, qui peut être utilisée sur le gestionnaire d’événements central pour éviter d’attacher des handles d’événement à chaque élément enfant du conteneur parent.
Profitez du métavers et des couches de données
Il existe deux concepts importants dans Flyweight : l’état interne intrinsèque et l’état externe extrinsèque, l’état interne est géré dans l’objet par des méthodes internes, et les informations externes peuvent être supprimées ou sauvegardées à l’extérieur.
Pour être franc, il s’agit d’abord de pincer un modèle original, puis de produire des modèles spécifiques avec leurs propres caractéristiques ; évidemment, il faut générer ici différents nouveaux objets, donc le mode usine apparaît souvent en mode Flyweight, l’état interne du Flyweight est utilisé pour le partage, et l’usine Flyweight est responsable de la maintenance d’un pool de Flyweight (pool de motifs) pour stocker les objets de l’état interne.
Utilise le mode Yuanyuan
Montrez que si nous avions une bibliothèque pour gérer tous les livres, les métadonnées de chaque livre ressembleraient provisoirement à ceci :
ID Titre Auteur Genre Nombre de pages ID éditeur ISBN Nous devons également définir quand et par qui chaque livre a été emprunté, ainsi que la date de retour et la disponibilité :
Date de départ checkoutMembre DueReturnDate Disponibilité Parce que l’objet livre est défini selon le code suivant, notez que le code n’a pas encore été optimisé :
Le programme peut fonctionner au début, mais avec le temps, le nombre de livres peut augmenter en grande quantité, et chaque livre a une version et une quantité différentes, et vous constaterez que le système devient de plus en plus lent. Des milliers d’objets livres en mémoire peuvent être imaginés, et nous devons les optimiser avec le mode partage.
Nous pouvons diviser les données en deux types : internes et externes, et les données liées à l’objet du livre (titre, auteur, etc.) peuvent être attribuées à des attributs internes, tandis que (checkoutMember, dueReturnDate, etc.) peuvent être attribuées à des attributs externes. Ainsi, le code suivant peut partager le même objet dans le même livre, car peu importe qui emprunte le livre, tant que le livre est le même, l’information de base reste la même :
Définir l’usine de base
Définissons une usine de base pour vérifier si l’objet du livre a été créé auparavant, le retourner s’il y en a un, et le recréer et stocker sinon, ce qui garantit que nous ne créons qu’un objet pour chaque type de livre :
Gérer le statut externe
L’état externe est relativement simple, sauf pour le livre que nous avons résumé, tout le reste doit être géré ici :
De cette manière, nous pouvons sauvegarder les mêmes informations du même livre dans un objet bookmanager, et une seule copie ; Comparé au code précédent, on constate qu’une grande partie de la mémoire est sauvegardée.
Profite du mode méta et du DOM
Je ne dirai pas grand-chose sur l’incident de la bulle au DOM ici, je crois que tout le monde est déjà au courant, donnons deux exemples.
Exemple 1 : Gestion centralisée des incidents Par exemple, si nous avons de nombreux types d’éléments ou de structures similaires (comme des menus, ou plusieurs li dans ul) qui doivent surveiller son événement de clic, alors nous devons lier chaque élément supplémentaire pour la liaison d’événements, s’il y a très, très nombreux éléments, alors la performance peut être imaginée, et combinée à la connaissance du bulling, si un élément enfant a un déclencheur d’événement, alors l’événement fera une bulle vers l’élément supérieur après le déclenchement, donc grâce à cette fonctionnalité, nous pouvons utiliser le mode Xiangyuan. Nous pouvons surveiller les événements des éléments parents de ces éléments similaires, puis déterminer quel élément enfant a un événement déclenché avant de procéder à d’autres opérations.
Nous allons ici combiner les méthodes bind/unbind de jQuery comme exemple.
HTML:
JavaScript:
Exemple 2 : Appliquer le mode Xiangyuan pour améliorer les performances
Un autre exemple, toujours lié à jQuery, en général nous utilisons l’objet élément dans la fonction de rappel de l’événement, nous utilisons souvent la forme $(this), en fait, il crée à plusieurs reprises un nouvel objet, car cela dans la fonction de rappel est déjà l’élément DOM lui-même, nous devons utiliser le code suivant :
En fait, si nous devons utiliser quelque chose comme $(this), nous pouvons aussi implémenter notre propre version du motif à instance unique, par exemple, nous pouvons implémenter une fonction comme jQuery.signle(this) pour retourner l’élément DOM lui-même :
Comment utiliser :
Cela renvoie l’élément DOM lui-même tel quel, sans créer d’objet jQuery.
résumé
Le mode Flyweight est un mode qui améliore l’efficacité et la performance du programme, ce qui accélère considérablement la vitesse de déroulement du programme. Il existe de nombreuses applications : par exemple, si vous souhaitez lire une série de chaînes d’une base de données, dont beaucoup sont des doublons, alors nous pouvons stocker ces chaînes dans un pool Flyweight.
Si une application utilise un grand nombre d’objets, et que ce grand nombre d’objets procure beaucoup de satisfaction de stockage, elle devrait envisager d’utiliser le mode partage ; Si vous supprimez l’état externe de l’objet, vous pouvez remplacer de nombreux groupes d’objets par relativement peu d’objets partagés, et vous pouvez envisager d’utiliser le mode Xiangyuan.
Adresse de référence :http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Précédent:Recommande 3 sites web pour trouver des icônesProchain:NombreDeMessagesEn Attente, MessagesEnfile, Message...
|