Mantenha os valores em um objeto pequeno e versionado
Em vez de salvar uma pontuação simples como 240, armazene um objeto JSON como { version: 2, bestScore: 240, settings: { sound: true } }. Ao carregar, analise o texto, verifique se é um objeto e inspecione sua versão antes de usar os campos. JSON.parse pode lançar um SyntaxError para JSON inválido, portanto, lide com texto malformado com um substituto definido em vez de permitir que a inicialização pare antes que o player possa começar.
Mantenha o objeto enxuto e documente o significado de cada versão. Não considere o número da versão uma validação suficiente: um valor marcado como versão 2 ainda pode estar incompleto ou ter o tipo errado. Verifique os campos dos quais a versão atual realmente depende, como bestScore, que deve ser um número finito e não negativo, e a preferência de som, que deve ser booleana.
Escreva uma migração para cada formato antigo compatível
Uma migração da versão 1 pode converter o número antigo no novo objeto, preencher uma preferência padrão e salvar o formato da versão 2. Execute as migrações em sequência quando houver suporte a várias versões históricas: da versão 1 para a 2 e depois da 2 para a 3. Teste cada caso de teste separadamente, incluindo uma chave ausente, JSON malformado, uma versão futura desconhecida e um valor parcialmente gravado. Decida se os dados desconhecidos serão preservados, ignorados ou redefinidos e, quando necessário, exiba uma mensagem de recuperação.
Considere os limites do armazenamento do navegador
A MDN descreve localStorage como dados associados a uma origem que podem persistir entre sessões do navegador, mas sua disponibilidade e seu conteúdo não devem ser tratados como um backup de conta garantido. Não armazene ali segredos nem decisões que precisem ser confiáveis. Se o jogo não conseguir ler um salvamento, permita um novo começo definido e evite tentar novamente a mesma migração interrompida em todo início.
Perguntas sobre Versionamento de dados de jogos localStorage
Devo limpar todos os salvamentos quando o formato mudar?
Somente quando essa for uma decisão explícita do produto. Se valores importantes puderem ser mapeados com segurança, uma pequena migração testada poderá preservá-los; caso contrário, defina um substituto claro e explique a redefinição.
Um campo de versão torna os dados do localStorage confiáveis?
Não. Ele identifica a forma esperada para que o jogo possa migrá-la ou rejeitá-la. Os dados ainda podem estar ausentes, malformados, desatualizados ou indisponíveis, portanto, valide antes de usá-los.
Leitura complementar
Viu alguma informação desatualizada? Informar uma correção