Aller au contenu

JavaScript WeakMap et WeakSet

Introduction aux WeakMap et WeakSet en JavaScript

JavaScript propose diverses structures de données, chacune adaptée à des objectifs différents. Parmi celles-ci figurent WeakMap et WeakSet, des versions spécialisées de Map et Set. Ils se distinguent par leur gestion de la mémoire et des références, notamment dans le contexte du garbage collection. Cet article explore en profondeur les nuances de ces structures, offrant une compréhension complète accompagnée d'exemples pratiques.

Comprendre WeakMap en JavaScript

Définition et utilisation de base

Un WeakMap est une collection de paires clé-valeur où les clés doivent être des objets (les valeurs primitives ne peuvent pas être utilisées) et les valeurs peuvent être de n'importe quel type. La partie "faible" de son nom fait référence à la manière dont il référence les clés. Contrairement à un Map classique, où les clés restent en mémoire tant que la map existe, dans un WeakMap, les clés sont maintenues faiblement. Cela signifie que s'il n'existe aucune autre référence vers l'objet clé, celui-ci peut être collecté par le garbage collector. Cette caractéristique unique fait de WeakMap un choix privilégié pour certains scénarios de programmation.

Exemple :


javascript
let weakMap = new WeakMap();
let obj = { name: "JavaScript" };
weakMap.set(obj, "Learning");
// obj is the key to "Learning" value

Cas d'utilisation de WeakMap

  • Mise en cache : Stocker les résultats calculés pour des objets sans empêcher leur collecte par le garbage collector.
  • Stockage de données privées : Attacher des données privées à un objet sans modifier l'objet lui-même.

Exemple de mise en cache :


javascript
let cache = new WeakMap();
async function computeExpensiveData(obj) {
    if (!cache.has(obj)) {
        let result = await fetch(`/api/data?id=${obj.id}`).then(r => r.json());
        cache.set(obj, result);
    }
    return cache.get(obj);
}

INFO

Pour une vue d'ensemble plus complète des objets Map et Set en JavaScript, qui offrent des options robustes pour gérer les collections, veuillez consulter notre guide détaillé sur JavaScript Map et Set.

Explorer WeakSet en JavaScript

Définition et caractéristiques

WeakSet est similaire à un Set, mais avec quelques différences clés. Il s'agit d'une collection d'objets, et non de valeurs de types arbitraires. Comme pour WeakMap, les objets dans un WeakSet sont maintenus faiblement. Cela signifie que si un objet dans un WeakSet n'est plus accessible par aucun autre moyen, il peut être collecté par le garbage collector. Notez que les clés doivent être des objets ; les valeurs primitives ne peuvent pas être utilisées. De plus, WeakSet ne prend pas en charge les méthodes d'itération ni la propriété .size, ce qui le rend moins polyvalent qu'un Set, mais utile pour certaines applications spécifiques.

Exemple :


javascript
let weakSet = new WeakSet();
let obj = { name: "JavaScript" };
weakSet.add(obj);
// obj is now part of the weakSet

Cas d'utilisation de WeakSet

  • Suivi d'objets : Garder une trace des objets sans empêcher leur collecte par le garbage collector.
  • Stockage d'objets uniques : Maintenir une collection d'objets en s'assurant qu'ils sont uniques.

Exemple de suivi :


javascript
let trackedObjects = new WeakSet();
function track(obj) {
    if (!trackedObjects.has(obj)) {
        trackedObjects.add(obj);
        // Perform tracking actions
    }
}

Conclusion :

Les WeakMap et WeakSet sont des outils spécialisés dans l'arsenal d'un développeur JavaScript. Ils ne conviennent pas à tous les scénarios, mais sont inestimables lorsque vous avez besoin de leurs caractéristiques spécifiques en matière de gestion de la mémoire et de référence d'objets. En comprenant et en appliquant correctement les WeakMap et WeakSet, les développeurs peuvent écrire un code JavaScript plus efficace et optimisé.

N'oubliez pas que le choix entre utiliser des WeakMap/WeakSet et leurs équivalents forts (Map/Set) dépend des exigences de votre application en matière de gestion de la mémoire et de modèles d'accès aux données. Maîtriser ces structures améliorera vos compétences en programmation JavaScript, en particulier dans les scénarios impliquant de grands ensembles de données et des opérations intensives en mémoire.

Pratique

Quelles sont les principales caractéristiques de WeakMap et WeakSet en JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.