Mobil tətbiqlərdə offline rejimi necə işləyir
1) Offline rejimi nədir və niyə lazımdır
Offline rejimi proqramın şəbəkəsiz (və ya qeyri-sabit internet ilə) işləmək və sonra əlaqə göründüyü zaman sinxronizasiya etmək qabiliyyətidir. O:- uğursuzluqları azaldır və saxlanmanı artırır;
- ilk ekranı sürətləndirir (məlumat artıq yerli);
- kritik hərəkətləri (layihələr, məzmuna baxmaq, əməliyyatların bir hissəsi) həyata keçirməyə imkan verir.
2) Oflayn memarlıq layları (hər hansı bir yığında)
1. Yerli məlumat saxlama
Mobil nativ: SQLite/Room (Android), Core Data/SQLite (iOS), Realm, Key-Value (SharedPreferences/UserDefaults).
Web/PWA: IndexedDB (yuxarıda - Dexie/LocalForage), Statika üçün Cache Storage.
2. Statik Cache (App Shell)
İkonlar, şriftlər, CSS/JS, əsas ekran şablonları.
3. Əməliyyat növbəsi (Outbox)
«Yazmaq» sorğuları (yaratmaq/dəyişdirmək/silmək) növbəyə düzülür və şəbəkə göründüyü zaman serverə gedir.
4. Sinxronizasiya təbəqəsi
Merj siyasətləri, versiyalar, deduplikasiya, retrai, backoff.
5. Şəbəkə vəziyyəti siqnalları
NetInfo/Reachability/API brauzer online/offline/limbo arasında UI keçid üçün.
3) iOS/Android-də necə görünür
Cache və DB: verilənlərin strukturu əsas API cavablarını əks etdirir (mahiyyətləri normallaşdırın).
Oflayn layihələr: formalar və hərəkətlər 'pending/sent/failed' bayraqları ilə yerli DB-yə yazılır.
Sinxronizasiya: fon tapşırığı vaxtaşırı outbox oxuyur və statusu qeyd edərək partiyalar (batch) göndərir.
Təhlükəsizlik: sirlər/tokenlər - Keychain (iOS )/Android Keystore. PII/ödənişləri olan məlumatlar (məsələn, GCM AES-256) təhlükəsiz konteynerdən açarla şifrələnir.
OS məhdudiyyətləri: fon vəzifələri enerji qənaət rejimlərindən asılıdır; sorğuların idempotentliyini və qətl prosesindən sonra yenilənməsini planlaşdırın.
4) PWA-da necə işləyir (web)
Service Worker (SW) - şəbəkə və proqram arasında proxy:- Precache (App Shell): interfeys dərhal mövcuddur.
- Runtime cache: aşağıdakı strategiyalar üzrə məlumatlar/media.
- Background Sync/Periodic Sync (mövcud olduqda): növbə göndərmək, istifadəçi olmadan cache yeniləmələri.
- Statika üçün IndexedDB və Cache Storage.
- Məhdudiyyətlər: saxlama kvotaları, arxa plan tapşırıqlarına ciddi nəzarət (xüsusilə iOS Safari).
5) Caching strategiyaları (nə və nə zaman tətbiq olunur)
Cache First - dəyişməz statika (nişanlar, şriftlər, JS versiyaları) üçün.
Stale-While-Revalidate (SWR) - siyahılar/kataloqlar üçün: dərhal cache-dən, yeni məlumatları arxa plana çəkin.
Network First - şəbəkə olduqda şəxsi məlumatlar üçün; backup - oflayn rejimdə cache.
Cache Only/Network Only - nadir xüsusi hallar (diaqnostika, şəxsi resurslar).
Birləşdirin: Statik - CF/SWR; dinamika - SWR/NF; qeydlər - növbə ilə.
6) Dəyişiklik növbəsi və idempotentlik
Outbox modeli: Hər bir hərəkət (POST/PUT/PATCH/DELETE) müvəqqəti ID, bədən, versiya və son tarix ilə növbə qeydində seriallaşdırılır.
Şəbəkə/server səhvləri zamanı eksponent backoff paketləri (batch) göndərin.
Başlıqlarda/end nöqtələrində idempotent açarları - təkrar göndərmə dubl yaratmayacaq.
BD əməliyyatları: növbə və lokal vəziyyətin yenilənməsi atom olmalıdır.
7) Münaqişələrin həlli (server vs client)
Yanaşmalar:- Last Write Wins (LWW) - sadə, lakin düzəlişləri itirmək riski.
- Version/ETag - server köhnə versiyaları rədd → müştəri merge/recovery edir.
- Əməliyyat transformasiyaları/CRDT - mürəkkəb varlıqların birgə redaktəsi üçün.
- Sahə qaydaları - hansı sahələr «həqiqət» serverdə, hansı - müştəri (məsələn, yerli işarələr/bayraqlar).
- Nişanı «sinxronlaşdırılmamış», «yeniləmə» düyməsini və münaqişə zamanı diff (versiyanı seçmək üçün) göstərin.
8) Media və ağır resurslarla iş
Deduplikasiya və hash (content-addressable) - eyni yükləməyin.
Playsholders/oflayn miniatürlər, tam versiyası - şəbəkədən sonra.
Zəif şəbəkə/batareya ilə fasilə ilə yükləmə növbəsi.
Media cache üçün TTL siyasəti - gigabayt qənaət etməyin.
9) Oflayn olmaq üçün UX nümunələri «insan»
TOP-qayda: heç vaxt «boşluq» göstərməyin. App Shell + skeleton + content son etibarlı versiyası.
Aydın statuslar: Online/Offline/Sinxronizasiya .../Hərəkət tələb olunur.
Undo/Retry: son oflayn fəaliyyətin ləğvi; avtomatik və əl təkrar.
Yerli layihələr: Görünən siyahılar «Göndərilməyi gözləyir».
Sakit səhvlər: aqressiv narahat etməyin - kifayət qədər gözəgörünməz göstəricilər + jurnal.
10) Oflayn təhlükəsizlik və məxfilik
Həssas məlumatları «diskdə» şifrələyin; Keystore/Keychain açarları.
PII offline yığım/saxlanmasını minimuma endirin; retenshn və avtomatik təmizləmə təyin edin.
Sirləri/tam PAN/CVV-ləri heç vaxt cache etməyin; ödəniş provayderlərinin tokenləri - yalnız PCI qaydalarına əsasən.
SW/müştərini XSS-dən (CSP, SRI) qoruyun, əks halda hücumçu növbəti onlayn rejimdə oflayn məlumatları oğurlaya bilər.
11) Platformaların məhdudlaşdırılması
iOS: brauzerdə arxa plan tapşırıqlarının ciddi limitləri; Web Push/periodic sync - nüanslarla; Keychain - sirlərə etibarlıdır.
Android: Daha çevik fon xidmətləri (WorkManager), lakin OEM optimallaşdırma vəzifələri «öldürə» bilər - «vacib» kimi qeyd edin.
PWA: IndexedDB/Cache Storage kvotaları, yer çatışmazlığı halında xəbərdarlıq etmədən sistem ilə təmizlənməsi.
12) Oflayn test
Şəbəkə profilləri (Airplane, 2G/3G, packet loss, high RTT).
Sink zamanı Kill/bərpa prosesi.
Chaos testləri: batch yarısı 429/503/timeout düşür.
Münaqişələr: iki cihazdan paralel düzəlişlər.
Saxlama kvotaları: diski doldurun, cache davranışını yoxlayın.
13) Metrika və müşahidə
Time To First Offline View (TTFOV): App Shell-in görünmə sürəti.
Offline coverage: Şəbəkəsiz mövcud olan ekranların/əməliyyatların payı.
Outbox health: növbə uzunluğu, mavi orta vaxt, səhv payı.
Konflikt əmsalı və əl merjelerinin payı.
Kvota/saxlama istifadə, OS təmizləmə tezliyi.
User impact: şəbəkəsiz başlayan sessiyalar → sink sonra dönüşüm.
14) Sürətli tətbiq planı (90 gün)
1. Oflayn skopu təyin edin: hansı ekranlar cache oxunur, hansı əməliyyatları təxirə salmaq olar.
2. DB və sxemi seçin: normallaşdırılmış cədvəllər, indekslər, versiyalar.
3. App Shell aktiv: PWA SW/statik cache/ikonlar/şriftlər.
4. Outbox yığın: növbə, idempotent, backoff, batch.
5. Cache strategiyaları: Siyahılar üçün SWR, şəxsi məlumatlar üçün Network First.
6. UX status + mavi jurnal, retry/undo.
7. Təhlükəsizlik: disk şifrələmə, CSP/SRI, PII minimumu.
8. Zəif şəbəkə testləri, xaos testləri və metriklər.
15) Tez-tez səhvlər və onlardan necə qaçmaq olar
«Oflayn» yalnız statik üçün. → Layihələr və outbox lazımdır, əks halda dəyəri azdır.
İdempotentlik yoxdur. → Retraj əməliyyatları. İdempotent açarları daxil edin.
Gizli konfliktlər. → İstifadəçi düzəlişlərini itirir. diff/grid göstərin.
TTL və cache təmizlənməsi yoxdur. → App şişir, OS zorla təmizləyir.
Sink UI bloklayır. → Sinxronizasiya həmişə fonda, UI - cavabdehdir.
Sirləri açıq saxlayın. → Keychain/Keystore və şifrələmədən istifadə edin.
16) FAQ
Hər şey üçün «tam» oflayn etmək olarmı?
Çox vaxt yoxdur: ödənişlər, lisenziyaların yoxlanılması və canlı məlumatlar şəbəkə tələb edir. Hibrid edin: cache oxumaq + gecikmiş qeydlər.
Hansı daha sürətli: SWR və ya Network First?
SWR cache-dən dərhal cavab verir və səssiz yeniləmə - siyahılar üçün ən yaxşı UX. Network First təravətin (profil, balans) vacib olduğu yerlərdə lazımdır.
Böyük media necə saxlanılır?
Miniatürləri və qısamüddətli TTL-ləri, orijinalları - istək üzrə, LRU-nu təmizləməklə keş.
Hər şeyi şifrələmək lazımdırmı?
PII/sirləri və həssas qeydləri şifrələyin. Qalanları risk siyasəti və kvotalardır.
Offline SEO/PWA-nı pisləşdirir?
Yox, düzgün SW və SSR ilə, əksinə, sürəti və təkrar ziyarətləri yaxşılaşdıracaq.
Oflayn rejim «işarə» deyil, sistem arxitekturasıdır: yerli DB + statik cache + dəyişiklik növbəsi + etibarlı sink və düşünülmüş UX statusudur. Təhlükəsizlik (şifrələmə, Keychain/Keystore), idempotentlik və metrika əlavə edin, pis şəbəkəni sınayın və tətbiqiniz İnternet olmadan da faydalı olaraq qalacaq və göründüyü zaman istifadəçinin məlumatlarını və etibarını itirmədən serverə çatacaq.