מעכשיו, שירותי העובדים של התוספים יכולים להישאר פעילים כל עוד הם מקבלים אירועים. כך אפשר לשפר את האמינות של צוות התמיכה, אבל יש לכך מלכודת שצריך להימנע ממנה.
החל מגרסה 110 של Chrome (בגרסת בטא החל מ-7 בפברואר 2023), עובדי השירות של התוספים נשארים פעילים כל עוד הם מקבלים אירועים. כך מתקנים בעיה בתזמון בהטמעה הקודמת של שירותי עובדים של תוספים. יכול להיות שהיו תפוגות זמן כשאירועים חדשים היו בתור האירועים, והן יכלו לקצר עבודה אסינכרונית. בעקבות השיפור הזה, אין יותר מגבלת זמן מקסימלית של חמש דקות לעובדים של שירותי התוספים.
במאמר הזה נסביר איך השתנו ההתנהגויות האלה.
רקע
רוב הזמן, שירותי עובדים של תוספים מתנהגים כמו שירותי עובדים באינטרנט, אבל בנוסף לאירועי שירות עובדים, שירותי עובדים של תוספים יכולים גם להקשיב לאירועים של תוספים. אירועים רגילים של קובצי שירות (service workers) מאריכים את משך החיים של קובץ השירות, אבל לפני השקת הגרסה 110 רק כמה אירועים בפלטפורמת התוספים שמרו על פעילות של קובץ שירות של תוסף.
בדרך כלל, Chromium מסיים את הפעילות של עובד שירות אחרי שמתקיים אחד מהתנאים הבאים:
- שירות ה-worker לא קיבל אירוע במשך יותר משלושים שניות ואין משימות ממושכות בטיפול. אם אירוע התקבל על ידי עובד שירות במהלך פרק הזמן הזה, הטיימר של המצב הלא פעיל הוסר.
- משימה ממושכת נמשכה יותר מחמש דקות ולא התקבלו אירועים ב-30 השניות האחרונות.
אירועי service worker חדשים שיתקבלו לפני שתוקף הטיימר של מצב חוסר פעילות או הטיימר של משימות ממושכות יפוג יתאימו את הטיימר ויאריכו את משך החיים של ה-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