Приложение и офлайн

Офлайн-режим

Кратко

Офлайн-режим кабинета tuk-tuk.online: данные хранятся в IndexedDB (до 25 МБ), действия без сети копятся в очереди и отправляются после восстановления связи, интерфейс обновляется оптимистично, внизу экрана показывается индикатор соединения.

  • Кеш данных: IndexedDB, до 25 МБ, сохранение каждые 500 мс после изменений, восстановление при открытии.
  • При открытии сначала показываются сохранённые данные, затем в фоне подтягиваются свежие.
  • Очередь действий без ограничения объёма; хранит запрос, данные и время; после восстановления сети действия уходят на сервер по одному, затем очередь очищается.
  • Оптимистичные ответы: статус задачи, теги, заметки, перемещение по канбану.
  • Сеть считается недоступной по событиям браузера или после 2 и более неудачных запросов подряд; статус-бар «Нет соединения» с кнопкой «Повторить» исчезает через 3 секунды после восстановления.
На этой странице

Без интернета кабинет продолжает показывать данные и принимать действия. Всё сделанное офлайн встаёт в очередь и уходит на сервер, как только связь вернётся.

Три механизма: кеш данных на устройстве, очередь действий и оптимистичные ответы интерфейса.

#Из чего состоит

КомпонентРольОбъём
Кеш данныхКопия ваших данных на устройствеДо 25 МБ
Очередь действийДействия, сделанные без сетиБез ограничений
Оптимистичные ответыИнтерфейс обновляется сразу, не дожидаясь сервераНе применимо

#Кеш данных

Загруженные данные сохраняются на устройстве: список диалогов и контактов, последние сообщения, настройки каналов, задачи, записи календаря и другое.

ПараметрЗначение
ХранилищеIndexedDB, встроенная база данных браузера
Максимальный размер25 МБ
Частота сохраненияКаждые 500 мс после изменений
ВосстановлениеАвтоматически при открытии приложения

Данные в IndexedDB переживают закрытие вкладки и перезагрузку компьютера.

#При открытии приложения

  1. Приложение проверяет, есть ли сохранённые данные.
  2. Если есть, показывает их сразу, не дожидаясь сервера.
  3. В фоне запрашивает свежие данные.
  4. Обновляет экран, если что-то изменилось.

Поэтому кабинет открывается быстро даже на медленном интернете.

#Очередь действий

Действие без интернета (сменить статус задачи, отправить сообщение) не теряется: оно сохраняется в очередь и ждёт сети.

text
Вы нажали «Выполнить задачу» (без интернета)
                │
                ▼
  Приложение проверяет: есть интернет?
                │
              Нет
                │
                ▼
  Действие   → сохраняется в IndexedDB
  Интерфейс  → обновляется сразу (оптимистичный ответ)
                │
        ... время проходит ...
                │
  Интернет появился
                │
                ▼
  Очередь → отправляет все действия на сервер
  Данные  → обновляются с сервера

Для каждого отложенного действия хранятся:

ПолеСодержимое
ЗапросКакое действие: создать задачу, изменить статус и так далее
ДанныеПараметры: текст, ID, новые значения
ВремяКогда действие совершено

#Когда сеть вернулась

  1. Браузер сообщает приложению о восстановлении сети.
  2. Приложение читает очередь из IndexedDB.
  3. Действия отправляются на сервер по одному, в порядке очереди.
  4. Активные данные обновляются с сервера.
  5. Очередь очищается.

#Оптимистичные ответы

Интерфейс показывает результат действия сразу, а запрос уходит на сервер в фоне.

Без них: нажали «Задача выполнена», подождали 0.5–2 секунды, экран обновился. С ними: нажали, экран обновился мгновенно, запрос ушёл в фоне. Если сервер вернул другой результат, экран обновится ещё раз.

Где используются:

  • смена статуса задачи;
  • добавление и удаление тегов;
  • редактирование заметок;
  • перемещение задач на канбан-доске;
  • другие быстрые действия.

#Как приложение понимает, что сети нет

СпособКак работает
События браузераБраузер сообщает о потере и восстановлении сети
Подсчёт ошибок2 и более запросов подряд не прошли: сеть считается недоступной

#Индикатор

Когда интернет пропал, внизу экрана появляется статус-бар «Нет соединения» с кнопкой «Повторить». После восстановления сети бар исчезает через 3 секунды.

Как кешируются файлы интерфейса: Скорость и кеш.