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

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

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

גישה אסטרטגית

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

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

עדיפות לרשת

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

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

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

שמירה במטמון

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

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

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

לא פעיל במהלך אימות מחדש

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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