Синтез блока
Три уровня хранения — и что каждый переживает
Данные в веб-приложении могут жить в трёх местах. Каждое место имеет свой «срок хранения» — и именно его несовпадение с ожиданиями вызывает почти все случаи «исчезновения» данных.
| Уровень | Где живёт | Что переживает | Когда пропадает |
|---|---|---|---|
| Состояние (state) | Оперативная память вкладки браузера | Ничего — только пока вкладка открыта | При перезагрузке страницы, закрытии вкладки или браузера |
| Хранилище браузера (localStorage, куки) | На диске устройства пользователя1 | Перезагрузку страницы и браузера | При очистке кэша/данных браузера, в режиме инкогнито1, на другом устройстве или другом браузере |
| База данных (на сервере) | На сервере — отдельно от пользователя | Всё: перезагрузку, смену устройства, смену браузера | Только при явном удалении данных, ошибочной миграции — или если нет бэкапа2 |
Первый уровень — состояние (state) — самый эфемерный. Это просто переменные в памяти текущей вкладки: пропадают, как только страница перезагружается. Никакого следа на диске.
Второй уровень — хранилище браузера (localStorage, sessionStorage, куки) — переживает перезагрузку, потому что записывается на диск устройства. Но «диск устройства» — ключевые слова: на другом телефоне или ноутбуке этих данных нет. И инкогнито-режим их не видит.
Третий уровень — база данных на сервере — самый надёжный. Данные живут вне браузера и вне устройства. Видны с любого устройства, любого браузера, в любом режиме. Можно настроить бэкапы (резервные копии).
Дерево диагностики: три вопроса по очереди
| Симптом | Где лежали данные | Что делать |
|---|---|---|
| Пропало после F5 / перезагрузки страницы | Только в состоянии (RAM вкладки) | Сохранять в хранилище браузера или базу в зависимости от нужной надёжности |
| Есть после перезагрузки, но нет на другом устройстве или после очистки кэша | В хранилище браузера (локально на устройстве), а не на сервере | Перенести хранение на сервер — в базу данных |
| Должно быть, но исчезло у всех пользователей | Было в базе, но что-то пошло не так на сервере | Проверить: не сохранилось, было удалено, миграция/деплой задели данные — и восстановить из бэкапа |
Есть ещё несколько причин «пропажи», которые на первый взгляд выглядят как исчезновение данных. Запрос к серверу упал с ошибкой — данные вроде бы отправились, но не сохранились (ошибка сети или код 500 от сервера). Так называемое «оптимистичное обновление» (optimistic update) — интерфейс уже показал результат, а сервер его отверг: данные исчезли с экрана, хотя казалось, что всё сохранено. Или кэш (временная копия) показывает старую версию, хотя данные уже изменились на сервере. Всё это — тема следующего блока, про то, как приложения общаются.
📌 «Данные пропали» почти всегда = данные были не на том уровне, на каком вы их ждали. Три вопроса — пережило F5? видно на другом устройстве? есть бэкап? — сразу показывают, где искать.