Retour à la leçonMission
Mission : le bus d'événements qui fuit en mémoire
Diagnostiquer une fuite mémoire causée par des abonnements Observer jamais désinscrits, et remplacer une cascade if/else par un Strategy pattern.
Contexte
Le tableau de bord de Technologik utilise un EventEmitter pour notifier chaque nouvelle commande à plusieurs widgets. Après quelques heures d'utilisation intensive, l'onglet du navigateur consomme de plus en plus de mémoire :
js
function afficherWidgetCommande(bus) {
bus.on("commande:creee", (commande) => miseAJourAffichage(commande));
// le widget est recree et redetruit plusieurs fois par session, mais jamais desabonne
}Ailleurs, une fonction appliquerRemise(prix, type, valeur) contient une longue cascade if (type === "pourcentage") { ... } else if (type === "fixe") { ... } else if (...) { ... } qui grossit à chaque nouveau type de remise ajouté par le service marketing.