Le partage d'un module WebAssembly entre des environnements du même site sera limité à la même origine.
Le partage d'un module WebAssembly (Wasm) entre des environnements même site, mais multi-origines sera abandonné pour permettre de limiter le champ d'application des clusters d'agents à des origines à long terme. Les développeurs qui utilisent les modules Wasm de cette manière doivent instancier ces modules à la même origine pour continuer à les utiliser après Chrome 95.
Présentation des modules Wasm et de leur fonctionnement
Les programmes WebAssembly sont organisés en modules, qui constituent l'unité de déploiement, de chargement et de compilation.
Dans l'exemple de code suivant, un module Wasm importé à partir de https://iframe.site.example
est partagé avec https://main.site.example
via postMessage()
. Notez que ces domaines sont identiques, mais multi-origines.
Module Wasm sur https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
À partir de Chrome 95, l'expéditeur et le destinataire doivent avoir la même origine. Dans le cas ci-dessus, https://iframe.site.example
doit être https://main.site.example
, ou inversement.
Pourquoi cette étape est-elle nécessaire ?
Chrome gère en interne différents documents, onglets et cadres sur des clusters d'agents selon le site. Cela signifie que les documents du même site sont traités dans le même processus (la façon dont cela fonctionne varie selon le navigateur). Récemment, Chrome a commencé à les gérer dans des unités plus précises: les origines. Nous les appelons des clusters d'agents selon l'origine. Toutefois, étant donné que cela coûte cher en ressources, les clusters d'agents selon l'origine n'ont été appliqués qu'à des sites Web limités de manière heuristique.
L'objectif est que tous les clusters d'agents soient basés sur l'origine par défaut. Pour ce faire, nous devons limiter les capacités nécessitant des clusters d'origine selon le site:
- (Chrome uniquement) Vous ne pouvez plus envoyer d'objets
SharedArrayBuffer
niWebAssembly.Memory
à d'autres pages multi-origines du même site. Cette fonctionnalité est déjà en vigueur depuis Chrome 92. - Vous ne pouvez plus envoyer d'objets
WebAssembly.Module
à d'autres pages multi-origines du même site viapostMessage()
. Ce changement est expliqué plus en détail ci-dessous. - Vous ne pouvez plus définir
document.domain
. Il s'agit d'une ancienne fonctionnalité qui permet normalement aux pages multi-origines du même site d'accéder de manière synchrone au DOM des autres. Toutefois, elle est désactivée dans les clusters d'agents selon l'origine.
Si vous prenez en compte tous les changements ci-dessus, Chrome utilisera par défaut les clusters d'agents selon l'origine.
Pour en savoir plus sur les clusters d'agents selon l'origine, consultez la section Demander l'isolation des performances avec l'en-tête Origin-Agent-Cluster.
Étapes suivantes et ressources
Pour que Chrome fonctionne par défaut avec des clusters d'agents selon l'origine, document.domain
est en lecture seule. L'équipe Chrome prévoit de mettre en place
ce changement en 2022.
Photo de Markus Winkler sur Unsplash