Без интернета кабинет продолжает показывать данные и принимать действия. Всё сделанное офлайн встаёт в очередь и уходит на сервер, как только связь вернётся.
Три механизма: кеш данных на устройстве, очередь действий и оптимистичные ответы интерфейса.
#Из чего состоит
| Компонент | Роль | Объём |
|---|---|---|
| Кеш данных | Копия ваших данных на устройстве | До 25 МБ |
| Очередь действий | Действия, сделанные без сети | Без ограничений |
| Оптимистичные ответы | Интерфейс обновляется сразу, не дожидаясь сервера | Не применимо |
#Кеш данных
Загруженные данные сохраняются на устройстве: список диалогов и контактов, последние сообщения, настройки каналов, задачи, записи календаря и другое.
| Параметр | Значение |
|---|---|
| Хранилище | IndexedDB, встроенная база данных браузера |
| Максимальный размер | 25 МБ |
| Частота сохранения | Каждые 500 мс после изменений |
| Восстановление | Автоматически при открытии приложения |
Данные в IndexedDB переживают закрытие вкладки и перезагрузку компьютера.
#При открытии приложения
- Приложение проверяет, есть ли сохранённые данные.
- Если есть, показывает их сразу, не дожидаясь сервера.
- В фоне запрашивает свежие данные.
- Обновляет экран, если что-то изменилось.
Поэтому кабинет открывается быстро даже на медленном интернете.
#Очередь действий
Действие без интернета (сменить статус задачи, отправить сообщение) не теряется: оно сохраняется в очередь и ждёт сети.
Вы нажали «Выполнить задачу» (без интернета)
│
▼
Приложение проверяет: есть интернет?
│
Нет
│
▼
Действие → сохраняется в IndexedDB
Интерфейс → обновляется сразу (оптимистичный ответ)
│
... время проходит ...
│
Интернет появился
│
▼
Очередь → отправляет все действия на сервер
Данные → обновляются с сервераДля каждого отложенного действия хранятся:
| Поле | Содержимое |
|---|---|
| Запрос | Какое действие: создать задачу, изменить статус и так далее |
| Данные | Параметры: текст, ID, новые значения |
| Время | Когда действие совершено |
#Когда сеть вернулась
- Браузер сообщает приложению о восстановлении сети.
- Приложение читает очередь из IndexedDB.
- Действия отправляются на сервер по одному, в порядке очереди.
- Активные данные обновляются с сервера.
- Очередь очищается.
#Оптимистичные ответы
Интерфейс показывает результат действия сразу, а запрос уходит на сервер в фоне.
Без них: нажали «Задача выполнена», подождали 0.5–2 секунды, экран обновился. С ними: нажали, экран обновился мгновенно, запрос ушёл в фоне. Если сервер вернул другой результат, экран обновится ещё раз.
Где используются:
- смена статуса задачи;
- добавление и удаление тегов;
- редактирование заметок;
- перемещение задач на канбан-доске;
- другие быстрые действия.
#Как приложение понимает, что сети нет
| Способ | Как работает |
|---|---|
| События браузера | Браузер сообщает о потере и восстановлении сети |
| Подсчёт ошибок | 2 и более запросов подряд не прошли: сеть считается недоступной |
#Индикатор
Когда интернет пропал, внизу экрана появляется статус-бар «Нет соединения» с кнопкой «Повторить». После восстановления сети бар исчезает через 3 секунды.
Как кешируются файлы интерфейса: Скорость и кеш.
