小さなバージョン付きデータオブジェクトに値を保存する
240 などの単純なスコアを保存する代わりに、{ version: 2, bestScore: 240, settings: { sound: true } } などの JSON オブジェクトを保存します。ロード時にテキストを解析し、それがオブジェクトであることを確認し、フィールドを使用する前にそのバージョンを検査します。 JSON.parse は無効な JSON に対して SyntaxError をスローする可能性があるため、プレーヤーが開始する前に起動を停止するのではなく、定義されたフォールバックを使用して不正なテキストを処理します。
データオブジェクトを小さく保ち、各バージョンの意味を記録します。バージョン番号だけで検証が済むと考えないでください。バージョン2と記された値でも、不完全だったり型が違っていたりすることがあります。現行ビルドが実際に依存するフィールドを確認します。たとえばbestScoreは有限かつ0以上の数値、サウンド設定は真偽値である必要があります。
対応する旧形式ごとに移行処理を用意する
バージョン1からの移行では、古い数値を新しいオブジェクトに変換し、既定の設定を補い、バージョン2の形式で保存できます。複数の旧バージョンに対応する場合は、バージョン1から2、続いて2から3のように順に移行します。キーの欠落、不正なJSON、未知の将来バージョン、途中まで書き込まれた値など、それぞれのテストケースを個別に確認します。未知のデータを保持、無視、リセットのどれにするか決め、必要な場合は復旧メッセージを表示します。
ブラウザーのストレージに関する制約を把握する
MDNによると、localStorageはオリジンに紐づき、ブラウザーのセッションをまたいで保持されることがあるデータです。ただし、利用可能であることや内容が維持されることは、アカウントのバックアップとして保証されません。秘密情報や信頼性が必要な判断を保存しないでください。ゲームがセーブデータを読めない場合は、定義済みの状態から再開できるようにし、失敗した同じ移行を起動のたびに再試行しないでください。
localStorage ゲームデータのバージョン管理についての質問
フォーマットが変更された場合、すべての保存をクリアする必要がありますか?
それが明確な製品決定である場合に限ります。重要な値を安全にマップできる場合は、小規模なテスト済みの移行でそれらを保存できます。それ以外の場合は、明確なフォールバックを定義し、リセットについて説明します。
バージョン フィールドは localStorage データの信頼性を高めますか?
いいえ。期待される形状を識別するので、ゲームはそれを移行または拒否できます。データがまだ欠落している、形式が間違っている、古い、または利用できない可能性があるため、使用する前に検証してください。
関連情報
古い情報を見つけましたか? 訂正を連絡