# Migrer délibérément les anciennes formes de sauvegarde

> Décidez comment lire les données enregistrées par les anciennes versions du jeu et migrez les formats connus avant de les utiliser.

- URL: https://oneshotgems.ai/fr/topics/local-storage-game-versioning
- Catégorie: Pour les développeurs de jeux
- Type: Guide
- Mis à jour le: 5 octobre 2026

Les tests d'état de sauvegarde demandent si les valeurs souhaitées persistent. Le versioning répond à une question différente : que devrait-il se passer lorsqu'une version ultérieure du jeu lit des données écrites par une version plus ancienne ? Si la première version stocke le meilleur score sous forme de nombre et la version deux stocke un objet de profil, lire l'ancienne forme comme si elle était nouvelle peut casser le menu ou ignorer silencieusement la progression. Placez une version à côté des données enregistrées et écrivez une migration explicite pour les formes antérieures connues.

## Conservez les valeurs dans un petit objet versionné

Au lieu d'enregistrer un score nu tel que 240, stockez un objet JSON tel que { version: 2, bestScore: 240, settings: { sound: true } }. Au chargement, analysez le texte, vérifiez qu'il s'agit d'un objet et inspectez sa version avant d'utiliser les champs. JSON.parse peut générer une SyntaxError pour un JSON non valide, donc gérez le texte mal formé avec une solution de repli définie plutôt que de permettre au démarrage de s'arrêter avant que le lecteur puisse commencer.

Gardez l’objet compact et documentez la signification de chaque version. Ne considérez pas le numéro de version comme une validation suffisante : une valeur marquée version 2 peut être incomplète ou avoir un type incorrect. Vérifiez les champs dont dépend réellement la version actuelle, par exemple bestScore, qui doit être un nombre fini et non négatif, et la préférence sonore, qui doit être booléenne.

## Écrivez une migration pour chaque ancien format pris en charge

Une migration de la version 1 peut convertir l’ancien nombre vers le nouvel objet, renseigner une préférence par défaut, puis enregistrer le format de la version 2. Exécutez les migrations dans l’ordre lorsque plusieurs versions historiques sont prises en charge : de la version 1 à la 2, puis de la 2 à la 3. Testez chaque cas de test indépendamment, notamment une clé manquante, un JSON mal formé, une version future inconnue et une valeur écrite partiellement. Décidez si les données inconnues sont conservées, ignorées ou réinitialisées, et affichez un message de récupération si nécessaire.

## Tenez compte des limites du stockage du navigateur

MDN décrit localStorage comme des données associées à une origine et susceptibles de persister d’une session du navigateur à l’autre. Sa disponibilité et son contenu ne constituent toutefois pas une sauvegarde de compte garantie. N’y stockez ni secrets ni décisions auxquelles il faut pouvoir se fier. Si le jeu ne peut pas lire une sauvegarde, autorisez un nouveau départ défini et évitez de réessayer la même migration interrompue à chaque lancement.

## Questions

**Dois-je effacer toutes les sauvegardes lorsque le format change ?** Seulement lorsqu'il s'agit d'une décision explicite concernant le produit. Si les valeurs importantes peuvent être cartographiées en toute sécurité, une petite migration testée peut les préserver ; sinon, définissez une solution de repli claire et expliquez la réinitialisation.

**Un champ de version rend-il les données localStorage fiables ?** Non. Il identifie la forme attendue afin que le jeu puisse la migrer ou la rejeter. Les données peuvent toujours être manquantes, mal formées, obsolètes ou indisponibles, alors validez-les avant de les utiliser.

## Suivez votre curiosité

- [Tester l'état de sauvegarde dans un jeu par navigateur](https://oneshotgems.ai/fr/topics/testing-game-save-state): Vérifiez ce qu'un jeu par navigateur enregistre, ce qui est réinitialisé et comment il se comporte lorsque les données stockées sont manquantes, obsolètes ou modifiées entre les sessions.
- [Une boucle de test de régression pour les petits jeux](https://oneshotgems.ai/fr/topics/game-regression-testing): Protégez une boucle de jeu fonctionnelle après les révisions avec une courte liste de contrôle de régression axée sur la mécanique, la notation, le redémarrage et les cas extrêmes à proximité.

## Pour aller plus loin

- [Stockage local MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)
- [MDN JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)

---
Page canonique: https://oneshotgems.ai/fr/topics/local-storage-game-versioning
