Par Marco Fioretti
Qu’est-ce que WebAssembly sur Terre?
WebAssembly, également appelé Wasm, est un format de code optimisé pour le Web et une API (Application Programming Interface) qui peut grandement améliorer les performances et les capacités des sites Web. La version 1.0 de WebAssembly a été publiée en 2017 et est devenue une norme officielle du W3C en 2019.
La norme est activement soutenue par tous les principaux fournisseurs de navigateurs, pour des raisons évidentes: la liste officielle des Cas d’utilisation «dans le navigateur» mentionne, entre autres, le montage vidéo, les jeux 3D, la réalité virtuelle et augmentée, les services p2p et les simulations scientifiques. En plus de rendre les navigateurs beaucoup plus puissants que JavaScript ne le pourrait, cette norme peut même prolonger la durée de vie des sites Web: par exemple, c’est WebAssembly qui alimente le support continu de Animations et jeux Flash sur Internet Archive.
WebAssembly n’est pas seulement pour les navigateurs; il est actuellement utilisé dans des environnements mobiles et en périphérie avec des produits tels que Cloudflare Workers.
Fonctionnement de WebAssembly
Les fichiers au format .wasm contiennent des instructions binaires de bas niveau (bytecode), exécutables à «une vitesse proche du processeur natif» par une machine virtuelle qui utilise une pile commune. Le code est emballé dans des modules – c’est-à-dire des objets directement exécutables par un navigateur – et chaque module peut être instancié plusieurs fois par une page Web. Les fonctions définies à l’intérieur des modules sont répertoriées dans un tableau dédié, ou Table, et les données correspondantes sont contenues dans une autre structure, appelée arraybuffer. Les développeurs peuvent allouer explicitement de la mémoire pour le code .wasm avec l’appel Javascript WebAssembly.memory ().
Une version texte pur du format .wasm – qui peut grandement simplifier l’apprentissage et le débogage – est également disponible. WebAssembly, cependant, n’est pas vraiment destiné à un usage humain direct. Techniquement parlant, .wasm n’est qu’un navigateur compatible cible de compilation: un format dans lequel les compilateurs de logiciels peuvent traduire automatiquement du code écrit dans des langages de programmation de haut niveau.
Ce choix est exactement ce qui permet aux développeurs de programmer directement pour l’interface utilisateur préférée de milliards de personnes, dans des langages qu’ils connaissent déjà (C / C ++, Python, Go, Rust et autres) mais qui ne pouvaient pas être utilisés efficacement par les navigateurs auparavant. Mieux encore, les programmeurs l’obtiendraient – du moins en théorie – sans jamais regarder directement le code WebAssembly ni s’inquiéter (puisque la cible est virtuel machine) sur les processeurs physiques qui exécuteront réellement leur code.
Mais nous avons déjà JavaScript. Avons-nous vraiment besoin de WebAssembly?
Oui, pour plusieurs raisons. Pour commencer, étant des instructions binaires, les fichiers .wasm peuvent être beaucoup plus petits – c’est beaucoup plus rapide à télécharger – que les fichiers JavaScript de fonctionnalités équivalentes. Surtout, les fichiers Javascript doivent être entièrement analysés et vérifiés avant qu’un navigateur puisse les convertir en bytecode utilisable par sa machine virtuelle interne.
Les fichiers .wasm, à la place, peuvent être vérifiés et compilés en un seul passage, rendant ainsi possible la «compilation en continu»: un navigateur peut commencer à les compiler et à les exécuter au moment où il démarre les télécharger, tout comme cela se produit avec les films en streaming.
Cela dit, toutes les applications WebAssembly concevables ne seraient certainement pas plus rapides – ou plus petites – que les applications JavaScript équivalentes qui sont optimisées manuellement par des programmeurs experts. Cela peut arriver, par exemple, si certains fichiers .wasm devaient inclure des bibliothèques qui ne sont pas nécessaires avec JavaScript.
WebAssembly rend-il JavaScript obsolète?
En un mot: non. Certainement pas pendant un moment, du moins à l’intérieur des navigateurs. Les modules WebAssembly ont toujours besoin de JavaScript car, de par leur conception, ils ne peuvent pas accéder au modèle d’objet de document (DOM), c’est-à-dire API principale conçue pour modifier les pages Web. De plus, le code .wasm ne peut pas effectuer d’appels système ni lire la mémoire du navigateur. WebAssembly ne s’exécute que dans un bac à sable et, en général, peut interagir avec le monde extérieur encore moins que JavaScript, et uniquement via des interfaces JavaScript.
Par conséquent – au moins dans un avenir proche – les modules .wasm fourniront simplement, via JavaScript, les parties qui consommeraient beaucoup plus de bande passante, de mémoire ou de temps processeur si elles étaient écrites dans ce langage.
En général, un navigateur a besoin d’au moins deux éléments pour gérer les applications dynamiques: une machine virtuelle (VM) qui exécute le code de l’application et des API standard que ce code peut utiliser pour modifier à la fois le comportement du navigateur et le contenu de la page Web. qu’il affiche.
Les machines virtuelles dans les navigateurs modernes prennent en charge à la fois JavaScript et WebAssembly de la manière suivante:
- Le navigateur télécharge une page Web écrite dans le langage de balisage HTML et la restitue
- si ce HTML appelle du code JavaScript, la VM du navigateur l’exécute. Mais…
- si ce code JavaScript contient une instance d’un module WebAssembly, celui-ci est récupéré comme expliqué ci-dessus, puis utilisé selon les besoins par JavaScript, via les API WebAssembly
- et lorsque le code WebAssembly produit quelque chose qui modifierait le DOM – c’est-à-dire la structure de la page Web «hôte» – le code JavaScript le reçoit et procède à la modification proprement dite.
Comment puis-je créer du code WebAssembly utilisable?
Il y a de plus en plus de communautés de langage de programmation qui prennent en charge la compilation directe vers Wasm, nous vous recommandons de consulter le guides d’introduction à partir de webassembly.org comme point de départ en fonction de la langue avec laquelle vous travaillez. Notez que tous les langages de programmation n’ont pas le même niveau de support Wasm, donc votre kilométrage peut varier.
Nous prévoyons de publier une série d’articles dans les mois à venir fournissant plus d’informations sur WebAssembly. Pour commencer à l’utiliser vous-même, vous pouvez vous inscrire au programme gratuit de The Linux Foundation Introduction à WebAssembly cours de formation en ligne.
La poste Une introduction à WebAssembly est apparu en premier le Linux Foundation – Formation.