Corrige une fuite mémoire dans La Corne d'Abondance (page blanche sur iPhone après plusieurs minutes)
Build and deploy / deploy (push) Successful in 36s
Build and deploy / deploy (push) Successful in 36s
À chaque fusion, les id matter-js des deux pièces étaient ajoutés à un Set pour empêcher une double fusion sur la même frame, mais jamais retirés pendant la partie — seulement vidés au redémarrage complet. Sur une longue partie avec beaucoup de fusions, ce Set grossissait sans jamais être nettoyé, contribuant à faire grimper la mémoire jusqu'à ce que Safari/iOS recharge la page de force. Les id sont maintenant retirés dès qu'une fusion est traitée. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -325,6 +325,15 @@ export function MelonGame({
|
||||
bodiesRef.current.delete(merge.pieceIdB);
|
||||
nodeRefs.current.delete(merge.pieceIdA);
|
||||
nodeRefs.current.delete(merge.pieceIdB);
|
||||
// Fuite mémoire corrigée ici : ces deux identifiants (les vrais id
|
||||
// matter-js, pas les pieceId de l'app) étaient ajoutés à chaque
|
||||
// fusion détectée dans collisionStart mais jamais retirés pendant
|
||||
// la partie — seulement vidés au redémarrage complet du jeu. Sur
|
||||
// une longue partie avec beaucoup de fusions, ce Set grossissait
|
||||
// sans jamais être nettoyé (constaté en prod sur iPhone : page
|
||||
// blanche puis rechargement après plusieurs minutes de jeu).
|
||||
mergingBodyIdsRef.current.delete(bodyA.id);
|
||||
mergingBodyIdsRef.current.delete(bodyB.id);
|
||||
removedIds.push(merge.pieceIdA, merge.pieceIdB);
|
||||
|
||||
if (merge.tier < maxTier) {
|
||||
|
||||
Reference in New Issue
Block a user