محدود کردن هم‌رسانی واحد Wasm به همان مبدأ

هم‌رسانی ماژول WebAssembly بین محیط‌های یک سایت به همان مبدأ محدود خواهد شد.

هم‌رسانی واحد WebAssembly (Wasm) بین محیط‌های هم‌سایت اما میان‌مبدئی منسوخ خواهد شد تا خوشه‌های عامل بتوانند در بلندمدت به مبدأها محدود شوند. توسعه‌دهندگانی که از ماژول‌های Wasm به این روش استفاده می‌کنند باید مطمئن شوند که این ماژول‌ها را در همان مبدأ نمونه‌سازی می‌کنند تا بتوانند پس‌از Chrome 95 به استفاده از آن‌ها ادامه دهند.

ماژول‌های Wasm چیست و چگونه کار می‌کنند

برنامه‌های WebAssembly در قالب ماژول‌هایی سازمان‌دهی می‌شوند که واحد استقرار، بار کردن، و کامپایل هستند.

در کد نمونه زیر، یک مدول Wasm واردشده از https://iframe.site.example ازطریق postMessage() با https://main.site.example هم‌رسانی می‌شود. توجه کنید که این دامنه‌ها هم‌سایت ولی میان‌مبدئی هستند.

واحد Wasm در https://iframe.site.example:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

از Chrome نسخه ۹۵ به بعد، فرستنده و گیرنده باید مبدأ یکسانی داشته باشند. در مورد بالا، 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 را فقط‌خواندنی می‌کنیم. تیم Chrome قصد دارد این تغییر را در سال ۲۰۲۲ اعمال کند.

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