ניתוח נתונים אופליין של Google בקלות

אז יש לכם אפליקציית אינטרנט מתקדמת עם קובץ שירות (service worker) שמאפשר לה לפעול במצב אופליין. נהדר! בנוסף, כבר הגדרתם את Google Analytics לאפליקציית האינטרנט שלכם, ואתם לא רוצים לפספס תובנות אנליטיות שמגיעות מהשימוש שמתרחש במצב אופליין. עם זאת, אם תנסו לשלוח נתונים ל-Google Analytics במצב אופליין, הבקשות האלה ייכשל והנתונים יאבדו.

הפתרון, לא מפתיע, הוא קובצי שירות (service workers)! באופן ספציפי, הקוד מוסיף ל-service worker כדי לאחסן בקשות של Google Analytics (באמצעות IndexedDB) ולנסות שוב מאוחר יותר, כשהרשת תהיה זמינה. שתפנו קוד כדי לטפל בלוגיקה הזו כחלק מאפליקציית האינטרנט של Google I/O בקוד פתוח, אבל הבנו שזהו דפוס שימושי, ושכפייה והדבקה של קוד יכולות להיות חלשות.

היום אנחנו שמחים להודיע שכל מה שדרוש כדי לטפל בבקשות של Google Analytics במצב אופליין בתוך ה-service worker שלכם נכלל בחבילת npm: npm install --save-dev sw-offline-google-analytics

שימוש ב-sw-offline-google-analytics

בקוד הקיים של ה-service worker, מוסיפים את הקטע הבא:

// This code should live inside your service worker JavaScript, ideally
// before any other 'fetch' event handlers are defined:

// First, import the library into the service worker global scope:
importScripts('path/to/offline-google-analytics-import.js');

// Then, call goog.offlineGoogleAnalytics.initialize():
// See https://github.com/GoogleChrome/workbox/tree/main/packages/workbox-google-analytics
goog.offlineGoogleAnalytics.initialize();

// At this point, implement any other service worker caching strategies
// appropriate for your web app.

זהו!

מה קורה מתחת לפני השטח?

sw-offline-google-analytics מגדיר טיפול אירועים חדש מסוג fetch ב-service worker, שמגיב לבקשות שנשלחות אל הדומיין של Google Analytics. (הספרייה מתעלמת מבקשות שאינן של Google Analytics, ומאפשרת למטפלי האירועים האחרים של ה-service worker להטמיע אסטרטגיות מתאימות למשאבים האלה).fetch קודם כל, המערכת תנסה למלא את הבקשה מול הרשת. אם המשתמש מחובר לאינטרנט, התהליך יתבצע כרגיל.

אם הבקשה לרשת נכשלת, הספרייה תשמור באופן אוטומטי מידע על הבקשה ל-IndexedDB, יחד עם חותמת זמן שמציינת מתי הבקשה נשלחה לראשונה. בכל פעם ש-service worker מתחיל לפעול, הספרייה בודקת אם יש בקשות בתור ומנסים לשלוח אותן מחדש, יחד עם כמה פרמטרים נוספים של Google Analytics:

אם שליחת הבקשה מחדש תצליח, מצוין. הבקשה תוסר מ-IndexedDB. אם הניסיון החוזר נכשל והבקשה הראשונית נשלחה לפני פחות מ-24 שעות, היא תישמר ב-IndexedDB כדי לנסות אותה שוב בפעם הבאה שבה שירות העבודה יתחיל. חשוב לזכור שלא בטוח שתתבצע עיבוד של היטים ב-Google Analytics שנוצרו לפני יותר מארבע שעות, אבל שום נזק לא יקרה אם תשלחו מחדש היטים קצת ישנים יותר "רק למקרה".

sw-offline-google-analytics implements גם אסטרטגיה של 'רשת קודם, חזרה למטמון' לקוד JavaScript של analytics.js שנחוץ כדי להפעיל את Google Analytics.

בקרוב יתווספו עוד תכונות.

sw-offline-google-analytics הוא חלק מהפרויקט הגדול יותר sw-helpers, שהוא אוסף ספריות שנועדו לספק שיפורים שאפשר להוסיף ללא מאמץ להטמעות קיימות של שירותי עבודה.

חלק מהפרויקט הזה הוא גם sw-appcache-behavior, ספרייה שמטמיעה אסטרטגיות של שמירת נתונים במטמון שמוגדרות במניפסט קיים של AppCache בתוך שירות לעבודה ברקע. המטרה שלו היא לעזור לכם לעבור מ-AppCache ל-Service Workers תוך שמירה על אסטרטגיית אחסון קבועה, לפחות בהתחלה.

אם יש לך רעיונות נוספים לספרייה, נשמח לשמוע ממך. לכן, יש לשלוח בקשה בכלי למעקב אחר בעיות.