ستقتصر مشاركة وحدة WebAssembly بين بيئات الموقع الإلكتروني نفسه على المصدر نفسه فقط.
سيتم إيقاف مشاركة وحدة WebAssembly (Wasm) بين بيئات الموقع الإلكتروني نفسه ولكن متعدّدة المصادر للسماح بتحديد نطاق مجموعات الوكلاء حسب المصادر على المدى الطويل. على المطوّرين الذين يستخدمون وحدات Wasm بهذه الطريقة التأكّد من إنشاء مثيل لهذه الوحدات في المصدر نفسه لمواصلة استخدامها بعد الإصدار 95 من Chrome.
ما هي وحدات Wasm وكيف تعمل؟
يتم تنظيم برامج WebAssembly في وحدات، وهي وحدة النشر والتحميل والتجميع.
In the following example code, a Wasm module imported from
https://iframe.site.example is shared with https://main.site.example via
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