PWA и офлайн
Manifest, service worker, кеш, IndexedDB, установка, обновление, работа без сети и синхронизация.
Материалы
- Local-first заметки и явная синхронизация
Создаём «Блокнот»: изменяемые записи в IndexedDB, атомарную локальную очередь и собственный серверный контракт. Учимся сохранять текст без доступной сети, повторять стабильное намерение, получать журнал по cursor и разрешать конфликт двух редакций вручную. IndexedDB здесь хранит данные; серверная синхронизация реализована приложением. Service worker, кеш оболочки и CRDT остаются темами других серий.
- Local-first приложение: локальная запись и границы синхронизации
Разделяем локальную заметку, серверную ревизию и ещё не подтверждённое изменение.
- Local-first приложение: схема IndexedDB для записей и очереди
Открываем три object store и связываем обновление схемы с жизненным циклом вкладок.
- Local-first приложение: атомарное сохранение заметки и outbox
Сохраняем форму и намерение отправки одной транзакцией, сообщая об успехе после complete.
- Local-first приложение: стабильный ID операции и неизменяемый снимок
Отделяем идентификатор заметки от идентификатора отправки и сохраняем снимок до подтверждения.
- Local-first приложение: серверный revision и журнал изменений
Реализуем push/pull контракт с проверкой исходной ревизии и сохранением результата операции.
- Local-first приложение: отправка outbox и подтверждение снимка
Применяем серверный ответ к отправленной операции, не теряя правку во время запроса.
- Local-first приложение: получение изменений и атомарный cursor
Сохраняем страницу серверного журнала и её cursor одной транзакцией.
- Local-first приложение: сравнение версий и ручное объединение
Разрешаем конфликт явным выбором, сохраняя серверную revision и новый ID намерения.
- Local-first приложение: удаление заметки и tombstone
Передаём удаление как версионированное состояние и удерживаем его для отключённых устройств.
- Local-first приложение: повторы, отключение сети и прогресс
Разделяем временный сетевой отказ, завершение сессии и прикладной конфликт, сохраняя очередь.
- Local-first приложение: несколько вкладок и несколько устройств
Координируем отправителей одного origin и защищаем сохранение устаревшей формы.
- Local-first приложение: квоты браузера и экспорт заметок
Обрабатываем ограниченное хранение и экспортируем согласованный диагностический снимок.
- Local-first приложение: аккаунт, локальная база и прекращение сессии
Разделяем записи разных владельцев и прекращаем отправку при отказе авторизации.
- Local-first приложение: передача Блокнота и сценарии восстановления
Собираем регламент локального хранения, синхронизации, конфликта и экспорта с явными границами.