ستقتصر مشاركة وحدة 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