שיתוף מודול WebAssembly בין סביבות באותו אתר יוגבל למקור זהה בלבד.
השיתוף של מודול WebAssembly (Wasm) בין סביבות באותו אתר אבל ממקורות שונים יוצא משימוש, כדי לאפשר הקצאת אשכולות סוכנים בהיקף ארוך של מקורות. מפתחים שמשתמשים במודולים של Wasm בצורה כזו חייבים להקפיד ליצור את המודולים האלה באותו המקור כדי להמשיך להשתמש בהם אחרי Chrome 95.
מהם מודולים של Wasm ואיך הם פועלים
התוכניות WebAssembly מאורגנות לפי מודולים, שהם היחידה של הפריסה, הטעינה וההידור.
בקוד לדוגמה הבא, מודול Wasm שיובא מ-https://iframe.site.example
משותף עם https://main.site.example
דרך postMessage()
. שימו לב שהדומיינים האלה הם מאותו אתר אבל ממקורות שונים.
מודול Wasm ב-https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
החל מגרסה 95 של Chrome, השולח והמקבל חייבים להיות מאותו מקור. במקרה שלמעלה, https://iframe.site.example
צריך להיות https://main.site.example
או להיפך.
למה צריך את זה
Chrome טיפל באופן פנימי במסמכים, בכרטיסיות ובמסגרות שונים באשכולות סוכנים המשויכים לאתר. המשמעות היא שהמסמכים באותו אתר מטופלים באותו תהליך (האופן שבו זה עובד משתנה בהתאם לדפדפן). לאחרונה, Chrome התחיל לטפל בהן ביחידות עם גרעיניות מפורטות יותר: מקורות. הוא נקרא אשכולות סוכנים המשויכים למקור. עם זאת, בגלל שהפעולה הזו יקרה למשאבים, אשכולות סוכנים המשויכים למקור הוחלו רק על אתרים מוגבלים באופן היוריסטי.
כברירת מחדל, כל אשכולות הסוכנים יוגדרו כשיוך למקור. כדי לעשות זאת, עלינו להגביל את היכולות שמחייבות אשכולות מקור המשויכים לאתר:
- (Chrome בלבד) כבר אי אפשר לשלוח אובייקטים
SharedArrayBuffer
אוWebAssembly.Memory
לדפים אחרים מאותו אתר ממקורות שונים. כבר קיימת גרסה כזו החל מגרסה 92 של Chrome. - לא ניתן יותר לשלוח אובייקטים מסוג
WebAssembly.Module
לדפים אחרים באותו אתר דרךpostMessage()
. שינוי זה מוסבר בפירוט בהמשך. - אי אפשר להגדיר יותר את
document.domain
. זוהי תכונה מדור קודם שבדרך כלל מאפשרת לדפים ממקורות שונים באותו אתר לגשת באופן סינכרוני ל-DOM של אחד של השני, אבל היא מושבתת באשכולות סוכנים המשויכים למקור.
אחרי שתטפלו בכל השינויים שלמעלה, Chrome יעבור להשתמש באשכולות סוכנים המשויכים למקור כברירת מחדל.
מידע נוסף על אשכולות סוכנים המשויכים למקור זמין במאמר בקשת בידוד ביצועים עם הכותרת של אשכול הסוכנים לפי מקור.
השלבים הבאים ומשאבים
כדי ש-Chrome יפעל עם אשכולות סוכנים המשויכים למקור כברירת מחדל, נהפוך את document.domain
לקריאה בלבד. הצוות של Chrome שואף ליישם את השינוי הזה במהלך שנת 2022.
תמונה מאת Markus Winkler ב-UnFlood