advanced

Offline-first синхронизация

Устойчивые клиентские data flows: локальные очереди, optimistic writes, разрешение конфликтов, background sync и degraded-mode UX.

Offline-first синхронизация даёт читать и писать с **локальным persistence** при ненадёжной сети, затем сверяться с сервером через очереди, retries, детект конфликтов и явный degraded-mode UX. На интервью ждут границы consistency — не «кешируем API responses».

| Компонент | Роль | |-----------|------| | Local store | IndexedDB/SQLite; переживает перезапуск | | Mutation queue | Упорядоченные ops с client-generated ID | | Optimistic UI | Локально; rollback или conflict при сбое | | Sync engine | Backoff, batching, background sync (SW), connectivity listeners | | Conflict rules | Last-write-wins vs CRDT vs server merge vs UI для пользователя | | Auth & permissions | Offline reads в cached scope; writes re-validated на сервере |

					Offline edit → enqueue { opId, entityVersion, payload } → UI pending →
online → POST /sync → 409 CONFLICT → merge UI или auto-rule
				

Модели consistency: strong на сервере; клиент может быть eventually consistent. Что видит пользователь при offline-редактировании с двух устройств.

PWA: стратегии cache в service worker ≠ sync данных — не путать static assets с authoritative business data.

На интервью: collaborative todo offline на двух устройствах. Identity ops, стратегия конфликтов, удаления, тесты flaky networks.

Типовые ошибки: optimistic UI без rollback; тихая потеря данных; неограниченная очередь; sync секретов на shared devices; Background Sync API «везде».

Компромисс — мгновенность для пользователя против сложности merge и support при conflict resolution.

Чеклист:

  • Client op IDs и server versioning или vector clocks.
  • Видимый sync status и retry.
  • Тесты с offline/online flaps.
  • Сервер — authority для auth и инвариантов.