Tutoriel JQuery : Données () la méthode pour éviter les problèmes de fuite de mémoire

Source : Internet
Auteur : utilisateur

DansJQueryDans la documentation officielle, l’utilisateur est averti qu’il s’agit d’une méthode de bas niveau qui doit être utilisée. () DonnéesMéthode pour le remplacer. .Data $ (element, clé, valeur) peuvent joindre tous les types de données à l’élément DOM, mais devraient éviter les fuites de mémoire causés par des références circulaires, comme suit :

La méthode jQuery.data nous permet d’attacher des données d’aucun type d’éléments DOM dans un et est à l’abri d’une référence circulaire ES et donc des fuites de mémoire. Nous pouvons définir plusieurs valeurs distinctes à un seul élément et récupérer plus tard :

Toutefois, pour cette méthode, le problème n’est pas seulement cela. Dans le FORUM de JQUERY, la question a été discutée en profondeur, et robert.katic a proposé une solution. La méthode de () .data $ s’applique à l’objet hôte et la course est optimisée, mais utilisant la méthode sur l’image d’une paire de locaux, le résultat ne peut pas être satisfaisant. Un élément dans des circonstances normales peut être utilisé par les. supprimer () la méthode pour le supprimer et effacer les données respectives. Toutefois, pour les objets locaux, cela ne peut pas être complètement supprimé et les données connexes continuent jusqu'à ce que l’objet de la fenêtre est fermée. Encore une fois, ces problèmes existent dans le cas objet parce que le processeur de l’événement (gestionnaires) est également stocké de cette façon.

La meilleure façon de résoudre ce problème, alors, est de stocker les données dans l’une des nouvelles propriétés de l’objet local. Que

// ...
Si {(elem.nodeType)
Cache [id] = dataObject ;
Elem [expando] = ID ;
} Else {}
Elem [expando] = dataObject ;
}
// ...

Cependant, une fois que la question de l’héritage a été impliquée, il y avait rien que la méthode pourrait faire. Échantillon

Var parent = {} ;
Stéphane var = Object.create (parent) ;
Var childB = Object.create (parent) ;

.Data $ (parent, « Foo », « Parent la valeur ») ;

Cela peut même est intentionnel
.Data $ (Stéphane, « foo »)
= ≫ « Valeur de parent »
.Data $ (childB, « foo »)
= ≫ « Valeur de parent »

C’est peut-être pas intentionnel
.Data $ (Stéphane, « foo », « Stéphane valeur ») ;
.Data $ (parent, « foo »)
= ≫ « valeur de Stéphane »
.Data $ (childB, « foo »)
= ≫ « valeur de Stéphane »

Dans un premier temps, l’objet qui stocke les données n’existe pas, donc créer un objet pour stocker la nouvelle valeur, comme indiqué dans le

Maintenant, nous essayons de modifier l’objet enfant les mêmes données.

Objet enfant n’existe pas pour ces données, alors il lève le long de la chaîne de prototype et l’objet parent possède seulement les données, et sa valeur est immédiatement remplacée. Par conséquent, obtenir la valeur de « Foo » de deux objets, parent et childB, se traduira par « valeur de Stéphane » au lieu de « valeur parent ».



Article associé

Nous contacter

Le contenu de cette page provient d'Internet et ne reflète pas l'opinion d'Alibaba Cloud ; les produits et services mentionnés sur cette page n'ont aucune relation avec Alibaba Cloud. Si le contenu de la page vous semble problématique, veuillez nous écrire un courriel, nous traiterons le problème dans les 5 jours suivant la réception de votre message.

Si vous constatez des cas de plagiat de la part de la communauté, veuillez envoyer un courriel à : info-contact@alibabacloud.com et fournir des preuves pertinentes. Un membre de notre équipe vous contactera dans les 5 jours ouvrables.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.