Личные данные
То, что видит только сам человек — его настройки, черновик, прогресс в тренажёре, — хранится в обычном localStorage:
const settings = JSON.parse(localStorage.getItem("settings") ?? "{}");
settings.sound = false;
localStorage.setItem("settings", JSON.stringify(settings));Писать и читать можно сразу, без ожидания: данные уже в странице, когда начинает работать её первый скрипт.
Где хранится#
- У Pairx, а не в телефоне. Песочница закрывается вместе с приложением, поэтому Pairx сохраняет
localStorageна своём сервере и отдаёт при следующем открытии — на любом устройстве человека. - Отдельно для каждого экземпляра. У одного приложения в двух чатах — два разных
localStorage; в личном режиме и в предпросмотре — свои. - Только этому человеку. Ни автор приложения, ни другие участники чата чужой
localStorageне видят.
Сохранение идёт в фоне, через доли секунды после изменения. Если приложение закрыли сразу после записи, последняя запись может не успеть сохраниться — для важного используйте общие хранилища, где ответ на запись означает, что сервер её принял.
Сколько#
До 256 КиБ на человека в одном экземпляре — всё содержимое вместе, как JSON в UTF-8: кириллица занимает 2 байта на букву. Только строки, как в любом localStorage. При превышении setItem бросает QuotaExceededError.
sessionStorage тоже есть, но живёт только пока приложение открыто.
Чего не делать#
- Не храните здесь общее. Другие участники этих данных не увидят — для общего есть хранилища чата.
- Не храните секреты.
localStorage— удобство, а не защита: любой код приложения, включая его следующие версии, читает его целиком. - Не рассчитывайте на IndexedDB и cookies. IndexedDB на iPhone нет, а cookies песочница стирает, когда приложение закрывается.
Удаление#
Человек удаляет свои данные в экземпляре из меню приложения — вместе с localStorage удаляются и его записи в общих хранилищах (см. Общие данные).