Vérifie combien d'attributs data et de classes tu ajoutes à chaque élément de la liste. Souvent les ralentissements ne viennent pas du nombre de nœuds DOM, mais du fait que le navigateur recalcule constamment les styles et la mise en page à cause des changements de classes lors du défilement. Si tu ajoutes dynamiquement des classes pour l'élément actif ou au survol, ça peut devenir un goulot d'étranglement. Essaie de déplacer ça en CSS en utilisant `nth-child` ou une couche séparée via `position: fixed`, pour que le navigateur ne touche pas à la liste principale.
Deuxième point - assure-toi que tu ne crées pas de nouveaux objets dans les props à chaque rendu. Par exemple, si tu passes `style={{ color: item.color }}` au lieu d'une valeur précalculée, React verra des objets différents et refera le rendu du composant. Même avec la mémoïsation, ça peut ralentir les choses. Mieux vaut préparer les styles à l'avance ou utiliser des variables CSS.
Et encore : si la liste contient des milliers d'éléments, même la virtualisation peut être lente si tu crées trop de nœuds DOM dans la fenêtre visible à la fois. Essaie de réduire le nombre de lignes rendues à la fois - affiche seulement la partie visible plus un petit buffer au-dessus et en dessous. Dans la plupart des bibliothèques de virtualisation, ça se configure via un paramètre comme `overscanRowCount`.