שמירה במטמון בזמן ריצה עם תיבת עבודה

שמירה במטמון בזמן ריצה מתייחסת להוספה הדרגתית של תגובות למטמון תוך כדי תנועה. אומנם שמירה במטמון בזמן הריצה לא עוזרת לשפר את האמינות של המצב הנוכחי זה יכול להוביל לאמינות יותר של בקשות עתידיות לגבי אותה כתובת URL.

מטמון ה-HTTP של הדפדפן הוא דוגמה לשמירה במטמון של סביבת זמן הריצה. הוא מאוכלס רק אחרי בקשה של כתובת URL נתונה. אבל קובצי שירות (service worker) מאפשרים לך להטמיע שמירה במטמון בזמן הריצה, מעבר למה שמטמון ה-HTTP יכול להציע.

עבודה אסטרטגית

בניגוד להפעלה במטמון (שתמיד מנסה כדי להציג קבוצה של קבצים מוגדרים מראש מהמטמון), שמירה במטמון בזמן הריצה יכולה לשלב לרשת ולמטמון במספר דרכים. בדרך כלל כל שילוב שנקראה אסטרטגיית שמירה במטמון. אסטרטגיות מרכזיות לשמירה במטמון כוללות:

  • עדיפות לרשת
  • שמירה במטמון
  • לא פעיל בזמן אימות מחדש

עדיפות לרשת

בגישה הזו, ה-Service Worker מנסה קודם לאחזר תשובה מ: הרשת. אם בקשת הרשת תצליח, מעולה. התשובה מוחזרת אל את אפליקציית האינטרנט שלך, ועותק של התגובה יאוחסן תוך שימוש ב'אחסון המטמון' API – יצירת רשומה חדשה או עדכון רשומה קודמת לאותה רשומה כתובת URL.

תרשים שמראה את הבקשה שעוברת מהדף ל-Service Worker ומ-Service Worker לרשת. בקשת הרשת נכשלת, ולכן הבקשה תעבור למטמון.

אם בקשת הרשת נכשלת לחלוטין, או נמשך יותר מדי זמן כדי להחזיר תגובה, אז התגובה האחרונה מהמטמון. במקום זאת.

שמירה במטמון

אסטרטגיה שמתמקדת בשמירה על מטמון היא למעשה ההיפך של 'התמקדות ברשת'. כאן וכשה-Service worker מיירט בקשה, הוא משתמש קודם במטמון Storage API כדי לבדוק אם יש תגובה זמינה במטמון. אם יש, שתשובה זו מוחזרת לאפליקציית האינטרנט.

עם זאת, אם קיימת שגיאה במטמון, ה-Service Worker יעבור לרשת ומנסה לאחזר את התשובה שם. בהנחה שבקשת הרשת הוא מוחזר לאפליקציית האינטרנט ועותק נשמר במטמון. הזה המערכת תשתמש בעותק שנשמר במטמון כדי לעקוף את הרשת בפעם הבאה שתוצג בקשה נוצרות אותן כתובות URL.

תרשים שמראה את הבקשה שעוברת מהדף ל-Service Worker ומ-Service Worker למטמון. הבקשה לשמירת המטמון נכשלת, ולכן הבקשה מועברת לרשת.

לא פעיל בזמן אימות מחדש

מצב לא פעיל בזמן אימות מחדש הוא שילוב היברידי. בזמן השימוש בשירות, worker יבדוק מיד אם יש תגובה שנשמרה במטמון, ואם יימצא, יעביר אותו בחזרה לאפליקציית האינטרנט.

בינתיים, לא משנה אם נמצאה התאמה במטמון, השירות שלך הוא גם יורה בקשת רשת כדי לקבל חזרה תשובה. הזה התגובה משמשת לעדכון כל תגובה שנשמרה בעבר במטמון. אם המטמון הראשוני הבדיקה לא נשלחה, עותק של תגובת הרשת גם הועבר חזרה לאינטרנט אפליקציה.

תרשים שמראה את הבקשה שעוברת מהדף ל-Service Worker ומ-Service Worker למטמון. המטמון מחזיר באופן מיידי תגובה וגם מאחזר עדכון מהרשת לבקשות עתידיות.

למה כדאי להשתמש ב-Workbox?

אסטרטגיות השמירה האלה במטמון מסתכמות למתכונים שבדרך כלל תצטרכו לשכתב את ה-Service Worker שלכם, שוב ושוב. במקום להיעזר ש-Workbox מציע אותן בחבילה כחלק strategies library (ספריית האסטרטגיות) יהיה מוכן לגשת אל ה-Service Worker.

ב-Workbox יש גם תמיכה בניהול גרסאות, כך שאפשר: התוקף פג רשומות שנשמרו במטמון, או מודיעים לאפליקציית האינטרנט כאשר עדכונים להיכנס לרשומה קודמת שנשמרה במטמון.

אילו מהנכסים צריך להישמר במטמון ובאילו אסטרטגיות?

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

קובצי מדיה גדולים יותר, נכסים שמוצגים ממארח של צד שלישי כמו CDN, או תגובות ב-API, הן רק כמה דוגמאות לסוגי הנכסים שלא ניתן שנשמרה מראש ביעילות. שימוש בחלונית 'רשת' בכלי הפיתוח כדי לזהות בקשות שמתאימים לקטגוריה הזאת, ולכל אחד מהם צריך לחשוב על איזון עדכניות לעומת אמינות.

שימוש ביציבות בזמן אימות מחדש כדי לתת עדיפות לאמינות על פני עדכניות

מכיוון שאסטרטגיה לא פעילה בזמן אימות מחדש מחזירה תגובה שנשמרה במטמון כמעט מיד - לאחר שהמטמון מאוכלס באמצעות הבקשה הראשונה - התהליך יסתיים כדי לקבל ביצועים מהירים ואמינים בעת שימוש באסטרטגיה הזו. מגיע עם איזון בין קבלת נתוני תגובה חוזרים שעשויים להיות לא עדכניים איזה מידע היה מאוחזר מהרשת. מומלץ להשתמש בשיטה הזו נכסים כמו תמונות פרופיל של משתמשים או התגובות הראשוניות של ה-API שמשמשות לאכלס תצוגה, אם יודעים שחשוב להציג משהו באופן מיידי, גם אם מדובר בערך ישן יותר.

שימוש בתעדוף לפי רשת כדי לתת עדיפות לעדכניות על פני אמינות

במובן מסוים, שימוש באסטרטגיה שמתמקדת ברשת הוא להכיר בניצחון שלכם בקרב מול הרשת — נותנים לה עדיפות, אבל זה גורם לחוסר ודאות על אמינות. לגבי סוגים מסוימים של נכסים, התגובה העדכנית היא עדיף לקבל מידע לא עדכני. יכול להיות שתעדיפו עדכניות כאשר שליחת בקשת API לטקסט של מאמר שמתעדכן לעיתים קרובות, מכונה.

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

שימוש במטמון בעדיפות גבוהה לכתובות URL עם גרסאות

באסטרטגיה שמתמקדת במטמון, ברגע שרשומה נשמרת במטמון היא אף פעם לא מתעדכנת. בשביל זה עליכם לוודא שאתם משתמשים בה רק בנכסים שאתם יודעים שלא סביר שינוי. באופן ספציפי, השיטה הזו מתאימה במיוחד לכתובות URL שיש בהן ניהול גרסאות מידע - אותו סוג של כתובות URL שצריך להציג גם יחד עם כותרת התשובה Cache-Control: max-age=31536000.