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);
|
bodiesRef.current.delete(merge.pieceIdB);
|
||||||
nodeRefs.current.delete(merge.pieceIdA);
|
nodeRefs.current.delete(merge.pieceIdA);
|
||||||
nodeRefs.current.delete(merge.pieceIdB);
|
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);
|
removedIds.push(merge.pieceIdA, merge.pieceIdB);
|
||||||
|
|
||||||
if (merge.tier < maxTier) {
|
if (merge.tier < maxTier) {
|
||||||
|
|||||||
Reference in New Issue
Block a user