[Bug] renderSimple() — fuite d'event listeners à chaque render #20

Closed
opened 2026-08-05 11:01:37 -04:00 by NixCyRy · 0 comments
NixCyRy commented 2026-08-05 11:01:37 -04:00 (Migrated from github.com)

Problème

Dans render.js:486-491, la fonction renderSimple() attache un nouveau document.addEventListener('click', ...) à chaque appel. Après N renders, il y a N listeners identiques actifs sur le document.

Conséquences

  • Fuite de mémoire progressive
  • Comportement imprévisible (le dropdown se ferme N fois)
  • Performance dégrade avec le temps

Fix

Extraire l'event listener hors de renderSimple(). L'attacher une seule fois au chargement ou utiliser un flag pour éviter les doublons.

// Avant (dans renderSimple):
document.addEventListener('click', function(e) {
  if (!e.target.closest('.simple-search-container')) {
    document.querySelectorAll('.simple-dropdown').forEach(d => d.classList.add('hidden'));
  }
});

// Après: listener global unique hors de la fonction
let _simpleClickListenerAttached = false;
function _ensureSimpleClickListener() {
  if (_simpleClickListenerAttached) return;
  _simpleClickListenerAttached = true;
  document.addEventListener('click', function(e) { ... });
}

Sévérité

🔴 Critical — fuite de mémoire + comportement corrompu après usage prolongé.

## Problème Dans `render.js:486-491`, la fonction `renderSimple()` attache un nouveau `document.addEventListener('click', ...)` à **chaque appel**. Après N renders, il y a N listeners identiques actifs sur le document. ## Conséquences - Fuite de mémoire progressive - Comportement imprévisible (le dropdown se ferme N fois) - Performance dégrade avec le temps ## Fix Extraire l'event listener hors de `renderSimple()`. L'attacher une seule fois au chargement ou utiliser un flag pour éviter les doublons. ```javascript // Avant (dans renderSimple): document.addEventListener('click', function(e) { if (!e.target.closest('.simple-search-container')) { document.querySelectorAll('.simple-dropdown').forEach(d => d.classList.add('hidden')); } }); // Après: listener global unique hors de la fonction let _simpleClickListenerAttached = false; function _ensureSimpleClickListener() { if (_simpleClickListenerAttached) return; _simpleClickListenerAttached = true; document.addEventListener('click', function(e) { ... }); } ``` ## Sévérité 🔴 Critical — fuite de mémoire + comportement corrompu après usage prolongé.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SlopVibe-org/nutri-food#20
No description provided.