Pairxдля разработчиков

Личные данные

То, что видит только сам человек — его настройки, черновик, прогресс в тренажёре, — хранится в обычном 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 удаляются и его записи в общих хранилищах (см. Общие данные).