איך מצב לא מקוון עובד ביישומים ניידים
1) מהו מצב מנותק ומדוע הוא נחוץ
מצב לא מקוון הוא היכולת של יישום לעבוד ללא רשת (או עם אינטרנט לא יציב), ולאחר מכן לסנכרן כאשר חיבור מופיע. האם הוא:- מפחית כשלונות ומגדיל את השמירה
- מאיץ את המסך הראשוני (הנתונים כבר מקומיים)
- מאפשר לך לבצע פעולות קריטיות (טיוטות, תוכן צפייה, חלק מפעולות) ”בשטח”.
2) שכבות של ארכיטקטורה לא מקוונת (על כל ערימה)
1. אחסון נתונים מקומי
מולדת מובייל: SQLite/Room (אנדרואיד), Core Data/SQLite (iOS), Realm, Key-Value (העדפות/מחדל).
WeB/PWA: IndexedDB (מעל - Dexie/LoutForage), אחסון מטמון עבור סטטי.
2. מטמון סטטי (מעטפת אפליקציה)
סמלים, גופנים, CSS/JS, תבניות מסך בסיסיות.
3. תור מבצע (Outbox)
בקשות כתיבה (ליצור/לשנות/למחוק) עומדות בתור ונשלחות לשרת כאשר הרשת מופיעה.
4. שכבת סינכרון
מדיניות מיזוג, גרסאות, שכפול, מגשים מחדש, חזרה.
5. אותות מצב רשת
NetInfo/Reachability/Browser API עבור החלפת UI בין online/offline/limbo.
3) איך זה נראה ב-iOS/Android
מטמון ו ־ DB - מבנה הנתונים משקף את תגובות ה ־ API העיקריות (נרמול ישויות).
טיוטות לא מקוונות: טפסים ופעולות נכתבות לבסיס הנתונים המקומי עם הדגלים ”ממתינים/נשלחים/נכשלים”.
סינכרוניזציה: משימת הרקע קוראת מדי פעם את התיבה החיצונית ושולחת חבורות, מסמנת את הסטטוס.
אבטחה: סודות/אסימונים - במפתחות (iOS )/אנדרואיד קיסטור. נתונים עם PII/תשלומים מוצפנים (לדוגמה, AES-256 GCM) עם מפתח ממכל מאובטח.
מגבלות מערכת ההפעלה: משימות רקע תלויות במצבי חיסכון בכוח; תוכנית לאידמפוטנטיות של בקשות וחידוש לאחר הריגת התהליך.
4) איך זה עובד ב ־ PWA (רשת)
עובד שירות (SW) - פרוקסי בין רשת ויישום:- Precache (App Shell): הממשק זמין באופן מיידי.
- מטמון זמן ריצה: נתונים/מדיה לפי אסטרטגיה להלן.
- סינכרון רקע/תקופתי (היכן שזמין): שליחת תור, עדכון המטמון ללא התערבות משתמש.
- IndexDB עבור נתונים ואחסון מטמון עבור סטטיות.
- מגבלות: מכסות אחסון, שליטה הדוקה במשימות רקע (במיוחד iOS ספארי).
5) אסטרטגיות מטמון (מה ומתי ליישם)
Cache First - עבור סטטי לא משתנה (אייקונים, גופנים, גרסאות JS).
SWR - עבור רשימות/ספריות: מיד מהמטמון, משוך למעלה נתונים טריים ברקע.
Network First - עבור נתונים אישיים כאשר הרשת נמצאת שם; גיבוי - מן המטמון כאשר מחובר.
מטמון בלבד/רשת בלבד - מקרים מיוחדים נדירים (אבחון, משאבים פרטיים).
קומביין: Statics - CF/SWR; דינמיקה - SWR/NF; רשומות - דרך התור.
6) שינוי תור ואידמפוטנטיות
מודל Outbox: כל פעולה (POST/PATCH/DELETE) מותקנת בתור עם זיהוי זמני, גוף, גרסה ומועד אחרון.
שולח צרור עם גיבוי מעריכי במקרה של שגיאות רשת/שרת.
מפתחות אידמפוטנטים בכותרות/נקודות קצה - הפעלה מחודשת לא תיצור שכפולים.
עסקאות במסד הנתונים - תור ועדכון המצב המקומי חייב להיות אטומי.
7) פתרון קונפליקט (שרת נגד לקוח)
גישות:- הכתב האחרון מנצח (LWW) - פשוט, אבל הסיכון לאבד את העריכה.
- Versioning/ETag - השרת דוחה גרסאות מיושנות # הלקוח מבצע מיזוג/ריבר.
- טרנספורמציות תפעוליות/CRDT לעריכה משותפת של ישויות מורכבות.
- כללי שדה - אילו שדות נכונים בשרת, אשר נמצאים על הלקוח (לדוגמה, תוויות/דגלים מקומיים).
- הצג את התג ”לא מסונכרן”, את הכפתור ”עדכון”, ואת הדיאף על הקונפליקט (כדי לבחור את הגרסה).
8) עבודה עם אמצעי תקשורת ומשאבים כבדים
שכפול וחשיש (תוכן כתובה) - לא לטעון את אותו הדבר.
ממלא מקום/מיניאטורות לא מקוונות, גרסה מלאה - אחרי הרשת.
הורד תור עם הפסקה במקרה של צינורות/סוללה גרועים.
מדיניות TTL עבור מטמון מדיה - לא להציל ג 'יגה בייט.
9) תבניות UX כדי לשמור על ”אדם” מנותק
כלל עליון: לעולם אל תראה ריקנות. "App Shell + שלד + הגרסה התקפה האחרונה של התוכן.
סטטוסים נקיים: Online/Offline/Synchronization .../Action דרושה.
ביטול/ריטרי: לבטל את הפעולה הלא מקוונת האחרונה; אוטומטי ושידור חוזר ידני.
טיוטות מקומיות:- שגיאות שקטות: אל תדאגו באגרסיביות - אינדיקטורים בלתי בולטים + מגזין זה מספיק.
10) ביטחון ופרטיות מנותקים
הצפן מידע רגיש ”בדיסק”; מפתחות בקיסטור/מחזיק מפתחות.
מזעור אוסף PII/אחסון מחובר; ציין שמירה וניקוי אוטומטי.
לעולם אל תטמון סודות/PAN/CVV מלא; אסימונים לספקי תשלומים, רק לפי חוקי ה-PCI.
הגן על SW/לקוח מפני XSS (CSP, SRI), אחרת התוקף יוכל לגנוב מידע לא מקוון בפעם הבאה באינטרנט.
11) מגבלות פלטפורמה
iOS: מגבלות קפדניות למשימות רקע בדפדפן; דחיפה/סינכרון תקופתי - עם ניואנסים; מחזיק מפתחות - אמין לסודות.
אנדרואיד: שירותי רקע גמישים (WorkManager), אך אופטימיזציות OEM יכולות ”להרוג” משימות - לסמן אותן כ ”חשובות”.
PWA: מכסות אחסון IndexDB/Cache, ניקוי המערכת ללא אזהרה כאשר החלל נמוך.
12) בדיקה לא מקוונת
פרופילי רשת (מטוס, 2G/3G, אובדן מנות, RTT גבוה).
להרוג/לשחזר את התהליך במהלך חבורה.
מבחני כאוס: חצי אצווה נופל 429/503/פסק זמן.
עורכים קונפליקטים משני מכשירים.
מכסות אחסון - מלא דיסק, בדוק התנהגות מטמון.
13) מדידות ויכולת תצפית
Time to First Offline View (TTFOV): App Shell speed.
כיסוי לא מקוון - הפרופורציה של מסכים/פעולות זמינות ללא רשת.
בריאות יוצאת: אורך תור, זמן ממוצע לחבורות, שיעור שגיאות.
יחס קונפליקט ופרופורציה של יד מרז 'ה.
מכסת אחסון/שימוש, תעריף טיהור מערכת ההפעלה.
השפעה על משתמש: הפעלות החלו ללא המרת רשת, לאחר חבורה.
14) תוכנית יישום מהירה (90 יום)
1. קבע את הכוונת הלא מקוונת: אילו מסכים נקראים מהמטמון, אילו פעולות ניתן לדחות.
2. בחר מסד נתונים וסכימה: טבלאות מנורמלות, אינדקסים, גרסאות.
3. הפעל מעטפת אפליקציה: PWA SW/static cache/icons/fonts.
4. איסוף יוצא: תור, אידמפוטנטיות, גיבוי, חבורות.
5. אסטרטגיות מטמון: SWR לרשימות, Network First עבור נתונים אישיים.
6. מצבי UX + יומן סינקה, retry/undo.
7. אבטחה: הצפנת דיסק, CSP/SRI, מזעור PII.
8. בדיקות רשת גרועות, בדיקות כאוס ומדדים.
15) טעויות תכופות וכיצד להימנע מהן
”מנותק” הוא רק עבור סטטי. = אתה צריך טיוטות ו outbox, אחרת הערך הוא קטן.
אין אידמפוטנטיות. * כפילות של פעולות ברטראס. הכנס את מפתחות האידמפוטנט.
קונפליקטים נסתרים. = משתמש מאבד את העריכה. הצג diff/reshalka.
ללא טי-טי-אל וניקוי מטמון. "היישום מתנפח, מערכת ההפעלה מנקה בכוח.
Sink חוסם UI. = סינכרוניזציה היא תמיד ברקע, UI הוא מגיב.
אחסון סודות בטקסט ברור. <השתמש מחזיק מפתחות/מפתחות והצפנה.
16) FAQ
האם זה אפשרי לעשות ”מלא” מחובר לכל דבר?
לעתים קרובות לא: תשלומים, בדיקות רישוי ונתונים חיים דורשים רשת. הפוך היברידי: לקרוא ממטמון + דחייה כותב.
שזה מהיר יותר: SWR או Network First?
SWR נותן תגובה מיידית מהמטמון ועדכון שקט - UX הטוב ביותר לרשימות. יש צורך ברשת ראשונה שבה הטריות (פרופיל, שיווי משקל) חשובה.
איך לאחסן מדיה גדולה?
מיניאטורות מטמון ו-TTL קצרות חיים, מקוריות - בקשת, עם ניקוי LRU.
האם אני צריך להצפין הכל?
הצפן סודות מח "ש ורשומות רגישות. השאר על מדיניות סיכון ומכסות.
האם לא מקוון להחמיר SEO/PWA?
לא, עם SW וסס "ר הנכונים, להיפך, זה ישפר מהירות וביקורים חוזרים.
מצב לא מקוון הוא לא ”טיק”, אלא ארכיטקטורת מערכת: בסיס נתונים מקומי + מטמון סטטי + שינוי תור + סינכרון אמין וסטטוסים מתחשבים של UX. הוסף אבטחה (הצפנה, מפתחות/קיסטורה), אידמפוטנטיות ומדידות, בחן רשת גרועה - ויישומך יישאר שימושי גם ללא האינטרנט, וכאשר הוא מופיע, הוא ישיג את השרת בלי לאבד מידע ואמון משתמש.