השיתוף של מודול WebAssembly בין סביבות באותו אתר יוגבל רק לאותו מקור.
היכולת לשתף מודול WebAssembly (Wasm) בין סביבות באותו אתר אבל ממקורות שונים תופסק כדי לאפשר להגדיר את ההיקף של אשכולות סוכנים למקורות לטווח ארוך. מפתחים שמשתמשים במודולים של Wasm באופן כזה צריכים לוודא שהם יוצרים את המודולים האלה באותו מקור כדי להמשיך להשתמש בהם אחרי גרסה 95 של Chrome.
מהם מודולים של 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 מ-Unsplash