Тарзи офлайнӣ дар барномаҳои мобилӣ чӣ гуна кор мекунад
1) Ҳолати офлайнӣ чист ва чаро он лозим аст
Ҳолати офлайнӣ қобилияти барномаест, ки бидуни шабака кор мекунад (ё бо Интернети ноустувор) ва пас аз пайдо шудани пайвастшавӣ ҳамоҳанг мешавад. Оё ӯ:- Нобарориҳоро коҳиш медиҳад ва нигоҳдориро зиёд мекунад
- Экрани ибтидоиро суръат мебахшад (маълумот аллакай маҳаллӣ аст)
- ба шумо имкон медиҳад, ки амалҳои танқидиро (нақшаҳо, тамошои мундариҷа, қисми амалиёт) "дар майдон" иҷро кунед.
2) Қабатҳои меъмории офлайнӣ (дар ҳама гуна анборҳо)
1. Захираи маълумотҳои маҳаллӣ
Ватани мобилӣ: SQL ite/Room (Android), Core Data/SQL ite (IOS), Realm, Key-Value (Preferences-и муштарак/Истифодабаранда).
Веб/PWA: Индексатсияи DB (аз ҳад зиёд - Dexie/Local
2. Кэши статикӣ (App Shell)
Нишонаҳо, ҳуруфҳо, CSS/JS, қолабҳои асосии экран.
3. Навбати амалиёт (Outbox)
Дархостҳои навиштан (эҷод/тағир додан/нест кардан) дар навбат меистанд ва ҳангоми пайдо шудани шабака ба сервер фиристода мешаванд.
4. Қабати синхронизатсия
Якҷоя кардани сиёсатҳо, версияҳо, такроркунӣ, бозсозӣ, бозгашт.
5. Сигналҳои ҳолати шабака
Netfo/Reachability/Browser API барои иваз кардани UI байни онлайн/офлайн/лимбо.
3) Чӣ гуна он ба IOS/Android назар мекунад
Кэш ва DB - Сохтори маълумот аксуламали асосии API-ро инъикос мекунад (субъектҳоро ба эътидол меорад).
Нақшаҳои офлайнӣ: шаклҳо ва амалҳо ба пойгоҳи додаҳои маҳаллӣ бо парчамҳои 'интизорӣ/ирсол/ноком' навишта мешаванд.
Синхронизатсия: вазифаи пасзамина давра ба давра қуттиҳоро мехонад ва партияҳоро мефиристад, ки ҳолати онро нишон медиҳад.
Амният: асрори/нишонаҳо - дар Keychain (IOS )/Android Keystore. Маълумот бо PII/пардохтҳо рамзгузорӣ карда мешавад (масалан, AES-256 GCM) бо калид аз контейнери бехатар.
Маҳдудиятҳои OS: вазифаҳои пасзамина аз режими сарфаи барқ вобастаанд; нақша барои idempotency дархостҳо ва дубора пас аз куштани раванд.
4) Чӣ гуна он дар PWA кор мекунад (веб)
Коргари хидмат (SW) - прокси байни шабака ва барнома:- Precache (App Shell): интерфейс фавран дастрас аст.
- Кэши вақти корӣ: маълумот/ВАО аз рӯи стратегияи дар поён овардашуда.
- Синхронизатсияи замина/Синхронизатсияи даврӣ (дар ҷое ки дастрас аст): фиристодани навбат, навсозии кэш бе дахолати корбар.
- Индексатсияи DB барои маълумот ва нигаҳдории кэш барои статика.
- Маҳдудиятҳо: квотаҳои нигаҳдорӣ, назорати қатъии вазифаҳои пасзамина (хусусан IOS Safari).
5) Стратегияҳои кэш (чӣ ва кай бояд татбиқ карда шавад)
Кэш Аввал - барои бетағйир мондани статикӣ (нишонаҳо, ҳуруфҳо, версияҳои JS).
Stale-When-Revalidate (SWR) - барои рӯйхатҳо/феҳристҳо: фавран аз кэш, маълумоти навро дар замина кашед.
Шабакаи аввал - барои маълумоти шахсӣ ҳангоми мавҷуд будани шабака; нусхабардорӣ - аз кэш ҳангоми офлайн.
Танҳо кэш/танҳо шабака - ҳолатҳои нодири махсус (ташхис, захираҳои хусусӣ).
Якҷоя: статика - CF/SWR; динамика - SWR/NF; сабтҳо - тавассути навбат.
6) Тағйир додани навбат ва аблаҳӣ
Модели Outbox: Ҳар як амал (POST/PUT/PATCH/DELETE) ба вуруди навбатӣ бо ID муваққатӣ, бадан, версия ва мӯҳлати ниҳоӣ табдил дода мешавад.
Фиристодани партияҳо бо пуштибонии экспоненсиалӣ дар ҳолати хатогиҳои шабака/сервер.
Калидҳои Idempotent дар сарлавҳаҳо/нуқтаҳои ниҳоӣ - азнавбарқароркунӣ нусхаҳоро эҷод намекунад.
Амалиётҳои пойгоҳи додаҳо - Навсозӣ ва навсозии давлати маҳаллӣ бояд атомӣ бошад.
7) Ҳалли низоъ (сервер vs муштарӣ)
Равишҳо:- Win Win Win (LWW) - оддӣ, аммо хатари аз даст додани таҳрир.
- Versioning/ETag - сервер версияҳои кӯҳнаро рад мекунад → муштарӣ якҷоя/дубора месозад.
- Трансформатсияи амалиётӣ/CRDT - барои таҳрири муштараки субъектҳои мураккаб.
- Қоидаҳои саҳроӣ - кадом майдонҳо дар сервер, ки дар муштарӣ ҷойгиранд (масалан, тамғакоғазҳо/парчамҳои маҳаллӣ).
- Нишон додани нишони "берун аз синхронизатсия", тугмаи "навсозӣ" ва фарқият дар низоъ (барои интихоби версия).
8) Кор бо ВАО ва захираҳои вазнин
Дедупликатсия ва хэш (мундариҷа-суроға) - ҳамон чизро бор накунед.
Ҷойгузинҳо/миниатюраҳои офлайнӣ, нусхаи пурра - пас аз шабака.
Навбат бо таваққуф дар ҳолати бад/батарея зеркашӣ кунед.
Сиёсати TTL барои кэши ВАО - гигабайтро сарфа накунед.
9) Намунаҳои UX барои нигоҳ доштани офлайн "инсон"
Қоидаи боло: Ҳеҷ гоҳ "холӣ" нишон надиҳед. "App Shell + skeleton + версияи охирини мундариҷа.
Ҳолати тоза: Онлайн/Офлайн/Ҳамоҳангсозӣ .../Амал талаб карда мешавад.
Бекор кардан/Такрор кардан: амали офлайнии охиринро барҳам диҳед; такрори худкор ва дастӣ.
Лоиҳаҳои маҳаллӣ: Рӯйхати намоёни пешниҳоди интизорӣ.
Хатогиҳои ором: хашмгинона хавотир нашавед - нишондиҳандаҳои бетараф + маҷалла кофӣ мебошанд.
10) Амнияти офлайнӣ ва махфият
Рамзгузории маълумоти ҳассос "дар диск"; калидҳо - дар Keystore/Keychain.
Ҳадди аққал ҷамъоварӣ/нигаҳдории PII; Нигоҳдорӣ ва тозакунии худкорро муайян кунед.
Ҳеҷ гоҳ сирри кэш/пурраи PAN/CVV; нишонаҳои провайдери пардохт - танҳо мувофиқи қоидаҳои PCI.
SW/мизоҷро аз XSS (CSP, SRI) муҳофизат кунед, вагарна ҳамлагар дафъаи оянда маълумоти офлайнро дуздида метавонад.
11) Маҳдудиятҳои платформа
IOS: маҳдудиятҳои қатъӣ барои вазифаҳои пасзамина дар браузер; Веб Push/синхронизатсияи даврӣ - бо нюанс; Keychain - барои асрори боэътимод.
Android: хидматҳои пасзаминаи фасеҳ (WORK Manager), аммо оптимизатсияи OEM метавонад вазифаҳоро "бикушад" - онҳоро ҳамчун "муҳим" қайд кунад.
PWA: Квотаҳои нигоҳдории индексатсияшуда/кэш, тозакунии система бидуни огоҳӣ ҳангоми кам будани ҷой.
12) Санҷиши офлайнӣ
Профилҳои шабакавӣ (Ҳавопаймо, 2G/3G, талафоти пакет, RTT баланд).
Ҳангоми ҷароҳат куштан/барқарор кардан.
Санҷишҳои бесарусомонӣ: нисфи партия 429/503/танаффус меафтад.
Низоъҳо - Таҳрири ҳамзамон аз ду дастгоҳ.
Квотаҳои нигоҳдорӣ - Пур кардани диск, санҷиши рафтори кэш.
13) Нишондиҳандаҳо ва мушоҳидаҳо
Вақт барои намоиши офлайнии аввал (TTFOV): Суръати App Shell.
Фарогирии офлайнӣ - таносуби экранҳо/амалиётҳо бидуни шабака.
Саломатии Outbox: дарозии навбат, вақти миёнаи кӯфта, сатҳи хатогӣ.
Таносуби низоъ ва таносуби мержасҳои дастӣ.
Квота/истифодаи нигаҳдорӣ, меъёри тозакунии ОС.
Таъсири корбар: сеансҳо бидуни табдилдиҳии шабака ва пас аз кӯфта оғоз ёфтанд.
14) Нақшаи татбиқи зуд (90 рӯз)
1. Андозаи офлайнро муайян кунед: кадом экранҳо аз кэш хонда мешаванд, кадом амалиётро ба таъхир гузоштан мумкин аст.
2. Асоси маълумот ва схемаро интихоб кунед: ҷадвалҳои муқарраршуда, индексатсияҳо, версияҳо.
3. Фаъолсозии App Shell: PWA SW/кэши статикӣ/нишонаҳо/ҳуруфҳо.
4. Ҷамъоварии Outbox: навбат, idempotence, backoff, партияҳо.
5. Стратегияҳои кэш: SWR барои рӯйхатҳо, Шабакаи аввал барои маълумоти шахсӣ.
6. UX statuses + sinka log, retry/undo.
7. Амният: рамзгузории диск, CSP/SRI, кам кардани PII.
8. Санҷишҳои бади шабака, санҷишҳои бетартибӣ ва ченакҳо.
15) Хатогиҳои зуд-зуд ва чӣ гуна аз онҳо канорагирӣ кардан
"Офлайн" танҳо барои статикӣ аст. → Ба шумо нақшаҳо ва қуттиҳо лозиманд, вагарна арзиши он хурд аст.
Не idempotency. → Нусхабардории амалиётҳо дар ретрас. Калидҳои idempotent ворид кунед.
Ихтилофи пинҳонӣ. → Корбар таҳрирро аз даст медиҳад. Нишон додани diff/reshalka.
Бе TTL ва тоза кардани кэш. → Ариза варам мекунад, ОС маҷбуран тоза мекунад.
Блоки ғалтаки UI. → Синхронизатсия ҳамеша дар замина аст, UI ҷавоб медиҳад.
Нигоҳ доштани сирри матн дар матни тоза. → Истифодаи Keychain/Keystore ва рамзгузорӣ.
16) FAQ
Оё барои ҳама чиз офлайнии "пурра" кардан мумкин аст?
Аксар вақт не: Пардохтҳо, чекҳои литсензионӣ ва маълумоти зинда шабакаро талаб мекунанд. Гибридро созед: аз кэш + навиштаҷоти таъхиршуда хонед.
Кадом тезтар аст: SWR ё Шабакаи аввал?
SWR вокуниши фавриро аз кэш ва навсозии ором медиҳад - беҳтарин UX барои рӯйхатҳо. Шабакаи аввал дар ҷое ки тару тоза (профил, тавозун) муҳим аст, лозим аст.
Чӣ тавр ВАО-и калонро нигоҳ доштан мумкин аст?
Миниатюраҳои кэш ва TTL-и кӯтоҳмуддат, аслӣ - бо дархост, бо тоза кардани LRU.
Оё ба ман лозим аст, ки ҳама чизро рамзгузорӣ кунам?
Рамзгузории PII/асрҳо ва сабтҳои ҳассос. Боқимонда дар сиёсати хатар ва квотаҳо мебошанд.
Оё офлайн SEO/PWA-ро бадтар мекунад?
Не, бо SW ва SSR-и дуруст, баръакс, суръатро беҳтар мекунад ва боздидҳои такрорӣ мекунад.
Ҳолати офлайнӣ "ишора" нест, балки меъмории система: пойгоҳи додаҳои маҳаллӣ + кэши статикӣ + навбати тағирёбанда + синкҳои боэътимод ва ҳолати UX. Амният (рамзгузорӣ, Keychain/Keystore), idempotency ва metrics илова кунед, шабакаи бадро санҷед - ва барномаи шумо ҳатто бе Интернет муфид боқӣ хоҳад монд ва вақте ки он пайдо мешавад, бидуни гум кардани маълумот ва эътимоди корбар ба сервер пайваста мерасад.