حصر مشاركة وحدة 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`);
})();

بدايةً من الإصدار 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.

تصوير ماركوس وينكلر على Un تحقق