محدود کردن اشتراک‌گذاری ماژول Wasm به همان مبدا

اشتراک گذاری یک ماژول 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`);
})();

از Chrome 95، فرستنده و گیرنده باید یک مبدا باشند. در مورد بالا، https://iframe.site.example باید https://main.site.example یا برعکس باشد.

چرا این مورد نیاز است

Chrome اسناد، برگه‌ها، و فریم‌های مختلف را در دسته‌های عاملی با کلید سایت مدیریت می‌کند. این به این معنی است که اسناد همان سایت در یک فرآیند پردازش می شوند (نحوه عملکرد دقیقاً در هر مرورگر متفاوت است). اخیراً، Chrome شروع به کار با آنها در واحدهای دانه ریزتر کرده است: مبدا. ما آن را خوشه های عامل کلیددار مبدا می نامیم. با این حال، از آنجایی که انجام این کار منابع گران است، خوشه‌های عامل با کلید مبدا فقط برای وب‌سایت‌های محدود به‌صورت اکتشافی اعمال می‌شوند.

برنامه این است که همه خوشه‌های عامل به‌طور پیش‌فرض دارای کلید اصلی باشند. برای دستیابی به این هدف، ما باید قابلیت هایی را که به خوشه های مبدا با کلید سایت نیاز دارند محدود کنیم:

  • (فقط Chrome) دیگر نمی توانید اشیاء SharedArrayBuffer یا WebAssembly.Memory را به سایر صفحات با منبع متقابل همان سایت ارسال کنید. این در حال حاضر از Chrome 92 برقرار است.
  • دیگر نمی‌توانید اشیاء WebAssembly.Module را از طریق postMessage() به صفحات متقاطع همان سایت ارسال کنید. این تغییر با جزئیات بیشتر در زیر توضیح داده شده است..
  • دیگر نمی توانید document.domain تنظیم کنید. این یک ویژگی قدیمی است که به طور معمول به صفحات متقاطع سایتی اجازه می دهد تا به طور همزمان به DOM یکدیگر دسترسی داشته باشند، اما در خوشه های عامل با کلید اصلی، غیرفعال است.

با پرداختن به همه تغییرات بالا، Chrome به‌طور پیش‌فرض به سمت استفاده از خوشه‌های عامل با کلید اصلی حرکت می‌کند.

برای کسب اطلاعات بیشتر درباره خوشه‌های عامل با کلید اصلی، به درخواست جداسازی عملکرد با سرصفحه Origin-Agent-Cluster مراجعه کنید.

مراحل و منابع بعدی

برای اینکه Chrome به‌طور پیش‌فرض با خوشه‌های عامل با کلید اصلی کار کند، document.domain فقط خواندنی می‌کنیم. تیم کروم قصد دارد این تغییر را در سال 2022 ایجاد کند.

عکس از مارکوس وینکلر در Unsplash