פורסם: 31 ביולי 2025
החל מגרסה Chrome 139, אפשר להשתתף בניסוי חדש של מקורות (origin) בנושא עובדים משותפים עם משך חיים מורחב. במהלך תקופת הניסיון, נוספת אפשרות חדשה extendedLifetime: true
שמאפשרת לעובדים משותפים להמשיך לפעול גם אחרי שהמסמך האחרון נטען.
תרחיש השימוש בתכונה של משך חיים ארוך יותר
אתרים רבים רוצים לבצע פעולות מסוימות כשהמשתמש יוצא מהדף. לדוגמה, כתיבה לאחסון או שליחת נתונים בחזרה לשרתים, כדי לשמור מצב או לתעד ניתוח נתונים.
פלטפורמת האינטרנט מספקת כמה ממשקי API לטיפול בחלק מהתרחישים הפשוטים יותר, אבל לכל אחד מהם יש מגבלות:
- ממשקי JavaScript API סינכרוניים, כמו פעולות הכתיבה של
localStorage
, מופעלים עד הסוף לפני שהדף הנוכחי מוסר מהזיכרון. - ל-
fetch API
יש מספר אפשרויות כמוkeepalive
, ולאחרונה גםfetchLater
, שמאפשרות לשלוח בקשות גם אחרי שהמסמך נסגר למשך תקופה קצרה.
עם זאת, הם מכסים רק עבודה סינכרונית, למעט בקשת fetch
הסופית. הם לא מאפשרים שימוש בממשקי API אסינכרוניים כמו IndexedDB, Compression Streams או Web Crypto כדי לבצע גיבוב או הצפנה. הרבה ממשקי API, במיוחד ממשקי API חדשים יותר, הם אסינכרוניים כדי למנוע חסימה של השרשור הראשי, ולכן אי אפשר להשתמש בממשקי ה-API האלה בפריקה.
החלופה היא להשתמש בסקריפטים של Service Worker, שלא קשורים למחזור החיים של דפים ספציפיים. עם זאת, זהו פתרון כבד יחסית, עם דרישות מורכבות יותר לגבי מחזור החיים והניהול של המפתחים, שלא לדבר על דרישות נוספות לגבי תהליכים וזיכרון עבור המשתמשים. הם גם לא תואמים לתרחיש השימוש העיקרי של Service Workers (לפעול כ-proxy לבקשות רשת). שימוש ב-service workers מלאים רק כדי להשלים עבודה מסוימת כשדף נטען נראה מוגזם.
הפתרון המוצע
SharedWorker API הוא API קל יותר שמשמש להעברת עבודה מה-thread הראשי. עם זאת, כרגע הם לא פעילים מעבר למשך החיים של המקור (כשהדף האחרון של המקור הזה מבוטל). ב-Chrome מציעים להוסיף אפשרות חדשה ל-API של SharedWorker כדי לאפשר לעובדים משותפים לשרוד את השמדת המסמך למשך זמן קצר.
ב-HTML Standard כבר יש המלצה להטמעות לשמור על פעילות של עובדים משותפים למשך זמן קצר אחרי פריקת המסמך, כדי שמעבר בין דפים מאותו מקור לא יגרום להפסקת הפעילות של העובד המשותף ואז ליצירה שלו מחדש. ההצעה להארכת משך החיים פשוט מרחיבה את זה ומציעה שגם אם המשתמש לא עובר ליעד מאותו מקור, סוכן המשתמש ישמור על פעילות העובד המשותף למשך זמן מסוים, כדי שעבודה אסינכרונית תוכל להסתיים.
ההצעה היא לאפשר לעובדים משותפים להמשיך לפעול אחרי פריקת המסמך האחרון, למשך אותו פרק זמן שבו עובדי שרת יכולים להישאר במצב לא פעיל – 30 שניות ב-Chrome. שימו לב: עבור עובדים משותפים, זהו משך חיים מקסימלי אחרי פריקה, ולא זמן השבתה. כלומר, מגבלת 30 השניות מתחילה מרגע הסרת הטעינה, ולא מרגע חוסר הפעילות. עבודות שהתחילו ולא הושלמו עד סוף התקופה הזו יבוטלו.
הפעלת תקופת השימוש המורחבת
כדי להפעיל את התכונה באתרים למשתמשים, צריך להירשם לניסיון מקור של עובדים משותפים עם משך חיים מורחב. לחלופין, מפתחים יכולים להפעיל את התכונה בדפדפן שלהם באמצעות הדגל chrome://flags/#enable-experimental-web-platform-features
.
קוד לדוגמה
אחרי שמצטרפים לניסוי או מפעילים את דגל התכונה, מפעילים את האפשרות 'משך חיים מורחב' באופן הבא:
const myWorker = new SharedWorker("worker.js", { extendedLifetime: true });
בנוסף, מכיוון שעובדים משותפים תומכים גם ב-blobs, אפשר להפעיל את התכונה הזו גם בלי סקריפט נפרד. לדוגמה, כדי לכתוב נתונים ל-IndexedDb:
const sharedWorkerScript = `
const transaction = db.transaction("analytics", "readwrite");
const store = transaction.objectStore("analytics");
const request = store.get("visitCount");
request.onsuccess = (event) => {
const newCount = (event.target.result || 0) + 1;
store.put(newCount, "visitCount");
};
`;
document.addEventListener("pagehide", () => {
const blob = new Blob([sharedWorkerScript], { type: "text/javascript" });
const blobURL = URL.createObjectURL(blob);
new SharedWorker(blobURL, { extendedLifetime: true });
});
יש לנו גם אפליקציה לדוגמה כאן: https://sharedworker-extendedlifetime.netlify.app/. כשמרעננים את הדף (או סוגרים אותו ופותחים אותו מחדש תוך 30 שניות), החישוב הקודם עדיין זמין.
אפשר לראות את העובדים המשותפים באתר בכתובת: chrome://inspect/#workers
בקרוב נשפר את האפשרות הזו כדי להראות אם נעשה שימוש באפשרות extendedLifetime
. גם עובדים משותפים עם משך חיים ארוך יותר ימשיכו להופיע בדף הזה למשך 30 שניות אחרי שהדף יוסר מהזיכרון.
שיתוף משוב
נשמח לקבל ממך משוב על התכונה החדשה של מעקב אחר מקורות של עובדים משותפים לאורך זמן.
הצורה של ה-API נמצאת בדיון ב-GitHub, ויש לנו הסבר טכני מפורט יותר.
כדי לשלוח משוב על ההטמעה של Chrome, אפשר לדווח על באג ב-Chromium.