מעכשיו, שירותי העובדים של התוספים יכולים להישאר פעילים כל עוד הם מקבלים אירועים. כך אפשר לשפר את האמינות של צוות התמיכה, אבל יש לכך מלכודת שצריך להימנע ממנה.
החל מגרסה 110 של Chrome (בגרסת בטא החל מ-7 בפברואר 2023), עובדי השירות של התוספים נשארים פעילים כל עוד הם מקבלים אירועים. כך מתקנים בעיה בתזמון בהטמעה הקודמת של שירותי עובדים של תוספים. יכול להיות שהיו תפוגות זמן כשאירועים חדשים היו בתור האירועים, והן יכלו לקצר עבודה אסינכרונית. בעקבות השיפור הזה, אין יותר מגבלת זמן מקסימלית של חמש דקות לעובדים של שירותי התוספים.
במאמר הזה נסביר איך השתנו ההתנהגויות האלה.
רקע
רוב הזמן, שירותי עובדים של תוספים מתנהגים כמו שירותי עובדים באינטרנט, אבל בנוסף לאירועי שירות עובדים, שירותי עובדים של תוספים יכולים גם להקשיב לאירועים של תוספים. אירועים רגילים של קובצי שירות (service worker) מאריכים את משך החיים של קובץ השירות, אבל לפני השקת הגרסה 110 רק כמה אירועים בפלטפורמת התוספים שמרו על פעילות של קובץ שירות של תוסף.
בדרך כלל, Chromium מסיים את הפעילות של עובד שירות אחרי שמתקיים אחד מהתנאים הבאים:
- שירות ה-worker לא קיבל אירוע במשך יותר משלושים שניות ואין משימות ממושכות בטיפול. אם אירוע התקבל על ידי עובד שירות במהלך פרק הזמן הזה, הטיימר של מצב חוסר הפעילות הוסר.
- משימה ממושכת נמשכה יותר מחמש דקות ולא התקבלו אירועים ב-30 השניות האחרונות.
אירועי service worker חדשים שיתקבלו לפני שתוקף הטיימר של מצב חוסר פעילות או הטיימר של משימות ממושכות יפוג, יתאימו את הטיימר ויאריכו את משך החיים של ה-service worker.
לצערנו, ההתנהגות הזו לא חלה על אירועי תוספים. אירועים של תוספים יכולים להעיר את עובד השירות של התוסף ולשמור עליו פעיל עד שהאירוע מסתיים, אבל הם לא יכולים להאריך את הטיימר של 30 שניות לפעילות לא פעילה. פירוש הדבר הוא שאפשר היה לסיים את שירות העובדים של התוסף בכל שלב אחרי השלמת האירוע האחרון של התוסף, גם אם הדפדפן שלח אירוע חדש לתוסף.
מה השתנה
החל מגרסה 110 של Chrome, כל האירועים מאפסים את הטיימר של זמן ההשבתה, והזמן הקצוב לתפוגה של זמן ההשבתה לא יתרחש אם יש אירועים בהמתנה. במילים אחרות, בהנחה שאין שיבושים בלתי צפויים, גולמי השירות של התוספים יישארו פעילים כל עוד הם מעבדים אירועים באופן פעיל. בנוסף, קריאות לממשקי API ספציפיים של תוספים ל-Chrome, כמו chrome.storage.local.get()
, יגרמו לאיפוס של זמן הקצאת הזמן לפעילות. פרטים נוספים:
- ה-service worker מסתיים אחרי 30 שניות של חוסר פעילות. (קבלת אירוע או קריאה ל-API של תוסף מאפסת את הטיימר הזה).
- ה-service worker מסתיים אם עיבוד של בקשה אחת, כמו אירוע או קריאה ל-API, נמשך יותר מ-5 דקות.
ממשקי API מסוימים, כמו העברת הודעות באפליקציות מקוריות, מספקים פקודה חזקה לניהול זמן פעולה תקינה (keep-alive) שמבטלת את שני הטיימרים האלה.
אנחנו עדיין פועלים כדי להבטיח שעובדים בשירותי התוספים ייסגרו כשהדבר אפשרי, בלי להשבית משימות ממושכות. כשאפשר, עדיף שסוכנים של שירותי תוספים מודעים למשאבים יפסיקו לפעול. בנוסף, התוספים צריכים להתכונן לסיום לא צפוי על ידי שמירת המצב. כך אפשר להגן מפני אירועים בלתי צפויים, כמו סגירה בכוח של הדפדפן על ידי המשתמש.
תמונה של Paula Guerreiro ב-Unsplash