Bosh sahifa Wiki Offline-first

Offline-first

Offline-first — ilova tarmoq mavjudligini asosiy shart deb qabul qilmay, lokal ma’lumot va funksiyani birinchi darajali manba sifatida loyihalash yondashuvidir. Foydalanuvchi o‘qish va ko‘pincha tahrirlashni offline davom ettiradi; ulanish qaytganda o‘zgarishlar server bilan sinxronlanadi. Bu oddiy cache dan kengroq bo‘lib, local database, operation log, conflict va security modelini talab qiladi.

Lokal manba

UI server javobini kutmasdan local database yoki cache dan holatni o‘qiydi. Network sync fon jarayonida local store ni yangilaydi. Repository qatlami UIga yagona observable model beradi, tarmoq va storage farqini boshqaradi.

Tahrir local transactionda darhol saqlanib, outboxga pending operation qo‘shiladi. Operation stable ID, entity, base version, payload va vaqtga ega. Sync worker ulanishda batch yuboradi. Server accepted versionni qaytaradi, outbox ackdan keyin tozalanadi.

Sinxronlash

Full sync kichik datasetda sodda, katta to‘plamda qimmat. Incremental sync cursor, change token yoki updated versiondan keyingi o‘zgarishlarni oladi. Token serverning consistency snapshotiga bog‘liq; faqat client soatidagi updated_at clock skew va teng timestampda record yo‘qotishi mumkin.

Push va pull tartibi muhim. Avval local operation yuborilib, keyin remote change olinsa yoki aksincha, conflict natijasi farq qilishi mumkin. Protokol base version va server sequence bilan deterministik qoidani belgilaydi. Retry bir operationni ikki marta yaratmasligi uchun idempotency ishlatiladi.

Konflikt

Last-write-wins sodda, ammo offline uzoq ishlagan foydalanuvchi ishini jim yo‘qotadi. Field-level merge, operation transformation yoki CRDT hamkorlik turiga mos tanlanadi. Manual conflict UI ikkala versiyani tushunarli ko‘rsatadi. Merge ham local va server audit tarixida yangi version sifatida yoziladi.

Delete tombstone bilan sinxronlanadi. Tombstone clientlarning maksimal offline davridan oldin tozalansa eski qurilma recordni qayta yaratadi. Qurilma juda uzoq uzilgan bo‘lsa incremental cursor bekor qilinib, xavfsiz full resync talab qilinishi mumkin.

PWA va mobil ilova

Service worker app shell hamda tanlangan HTTP javoblarni cache qiladi. Cache-first static assetga, network-first tez yangilanuvchi dataga, stale-while-revalidate kontentga mos. POST requestni oddiy cache hal qilmaydi; background sync va local outbox kerak.

Mobil OS fon ishini energiya va tarmoq siyosati bilan cheklaydi. Sync aniq vaqtda bajarilishiga suyanmaydi. UI pending, synced va failed holatlarini ko‘rsatadi. Foydalanuvchi ilovani yopsa ham local transaction durable qoladi.

Xavfsizlik va storage

Offline data qurilmada ko‘proq muddat turadi. OS secure storage kalitni, encrypted database kontentni himoya qiladi. Logout local token, cached shaxsiy data va pending operationga aniq siyosat qo‘llaydi. Shared qurilmada foydalanuvchilar datasi alohida bo‘ladi.

Server authorization sync paytida qayta tekshiriladi; offline UI ruxsat bergani server majburiy qabul qiladi degani emas. Ruxsat o‘zgargan bo‘lsa pending amal rad etiladi va foydalanuvchiga yo‘qotmasdan eksport yoki tuzatish yo‘li beriladi.

Sinov

Test tarmoqning request o‘rtasida uzilishi, duplicate, tartibsiz change, server reset, storage quota va clock o‘zgarishini qamrab oladi. Sync invariantlar property-based sinovdan o‘tadi. Metrikalar pending operation yoshi, conflict, full resync, failure va local storage hajmini ko‘rsatadi. Offline-first muvaffaqiyati faqat “offline sahifa ochildi” emas, data yo‘qotmasdan qayta birlashish bilan o‘lchanadi.

Bog‘liq tushunchalar

Synchronization, Local-first software, Conflict resolution, Service worker, Outbox pattern, CRDT, Tombstone