حصر مشاركة وحدة Wasm على المصدر نفسه

ستقتصر مشاركة وحدة WebAssembly بين بيئات الموقع الإلكتروني نفسه على المصدر نفسه فقط.

سيتم إيقاف مشاركة وحدة WebAssembly بين بيئات الموقع الإلكتروني نفسه ولكن من مصادر متعددة نهائيًا للسماح بحصر نطاق مجموعات الوكلاء بالمصادر على المدى الطويل. على المطوّرين الذين يستخدمون وحدات 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 إلى استخدام مجموعات الوكيل المرتَّبة حسب المصدر تلقائيًا.

لمعرفة مزيد من المعلومات عن مجموعات الوكلاء المستنِدة إلى المصدر، اطّلِع على مقالة طلب عزل الأداء باستخدام العنوان Origin-Agent-Cluster.

الخطوات التالية والموارد

لكي يعمل Chrome مع مجموعات موظّفي الدعم المُعيّنة حسب المصدر تلقائيًا، سنجعلdocument.domain للقراءة فقط. يهدف فريق Chrome إلى طرح هذا التغيير في وقت ما من عام 2022.

صورة ماركوس وينكل على Unsplash