WebAssembly : signification, avantages, cas d'utilisation et plus
WebAssembly ou Wasm est un format de code binaire permettant de créer des programmes pouvant s'exécuter sur n'importe quelle architecture informatique.
Le système comprend une machine virtuelle et un compilateur qui traduit le code informatique des langages de programmation, tels que C ou C++ dans les formats lisibles par l'homme .wat et les formats binaires .wasm.
L'objectif initial de WebAssembly était de permettre aux programmeurs de développer des applications hautes performances pour les pages Web en permettant des vitesses d'exécution quasi natives dans un navigateur. Mais la technologie semble maintenant évoluer au-delà des navigateurs et dans le cloud.
Ce guide vous montre tout ce que vous devez savoir sur cette technologie en évolution, ses forces et ses faiblesses, ainsi que son potentiel futur.
Qu'est-ce que WebAssembly ?
WebAssembly est un format de code binaire qui s'exécute sur une machine virtuelle et que différents langages peuvent compiler. Il est conçu pour être portable et peut fonctionner sur un navigateur Web ou en tant qu'application serveur.
Publié pour la première fois en 2017, WebAssembly est une recommandation du W3C depuis 2019 et est maintenu par de nombreux contributeurs, dont Mozilla, Google, Microsoft, Red Hat et bien d'autres.
L'objectif initial était de développer des vitesses d'exécution quasi natives, comme vous le feriez avec les applications C/C++ à l'intérieur du navigateur. Il est également censé être une norme Web sûre, ouverte, débogable et sans version, rétrocompatible et conforme à JavaScript.
Comment fonctionne WebAssembly ?
WebAssembly est conçu comme un moteur d'exécution, tel que Java ou JavaScript, qui peut être intégré dans un environnement de navigateur ou de serveur pour exécuter du code informatique compilé dans les formats de texte binaire .wasm ou .wat.
Pour écrire du code pour l'exécution de WebAssembly, le développeur écrit le programme dans l'un des nombreux langages pris en charge. Ensuite, compilez-le à l'aide d'un compilateur WebAssembly soit AOT (Ahead of Time) ou JIT (juste à temps).
Ce code peut faire la plupart des travaux dans l'environnement d'exécution, mais il ne peut pas accéder ou modifier les objets DOM d'un navigateur. Toute interaction de ce type doit passer par JavaScript.
Comment créer un exemple d'application WebAssembly
La création d'une application Wasm simple pour le navigateur Web est possible en quelques étapes seulement, comme vous pouvez le voir ci-dessous :
- Téléchargez et installez le SDK Emscripten.
- Rédigez votre échantillon bonjour le monde.c code ou faites-le en C++/Rust si vous préférez.
- Courir emcc bonjourmonde.c -s WASM=1 -s bonjourmonde.html dans un terminal pour compiler le code en WebAssembly avec Emscripten. Il créera les fichiers binaires Wasm, HTML et JavaScript dont vous avez besoin (code glu).
- Servir la page helloworld.html via votre navigateur Web.
Les avantages de WebAssembly
Il existe de nombreuses raisons d'adopter WebAssembly et ses technologies associées, notamment :
- Performances quasi natives – WebAssembly a une telle conception de bas niveau qu'il offre des performances similaires aux langages de bas niveau tels que C et C++.
- Sécurité – Le système est conçu pour être sécurisé en l'isolant dans un environnement virtuel avec un accès système limité.
- Norme ouverte – De nombreuses organisations et individus contribuent à WebAssembly et il s'agit d'une recommandation officielle du W3C.
- Légèreté – WebAssembly se compile en code binaire à exécuter dans une machine virtuelle. Ce code est portable et n'a pas besoin ou n'est pas fourni avec des fichiers système.
- Prise en charge multi-langue – Plus de 50 langages peuvent être compilés dans WebAssembly.
- Indépendant de la plateforme – La machine virtuelle WebAssembly est conçue pour chaque architecture afin de présenter le même environnement d'exécution. Tout ce qu'un développeur a à faire est d'écrire du code pour WebAssembly.
Les limites de WebAssembly
- Travail en cours – La norme est encore en développement et, par conséquent, de nombreuses fonctionnalités et améliorations sont encore à venir.
- Pas de ramassage des ordures - WebAssembly manque toujours de récupération de place, bien qu'il puisse bientôt être implémenté.
- Pas d'accès DOM – Vous ne pouvez pas accéder au DOM d'un navigateur web directement depuis WebAssembly, vous devrez passer par JavaScript.
WebAssembly contre Java
Java est en quelque sorte la première implémentation de WebAssembly. Il a été conçu comme un langage à écriture unique et exécutable n'importe où, mais a développé de nombreux problèmes en cours de route.
Tout comme avec Java, WebAssembly utilise un RE (Runtime Environment) pour exécuter son code, mais contrairement à Java, vous pouvez écrire WebAssembly dans le langage de votre choix.
WebAssembly contre JavaScript
WebAssembly s'exécute dans le navigateur ou dans un autre environnement hôte, tout comme JavaScript. Cependant, là où JavaScript est livré à l'environnement d'exécution au format texte et est compilé juste à temps, WebAssembly a à la fois des formats texte et binaire.
Dans les navigateurs Web, JavaScript a accès au DOM, contrairement à WebAssembly. Cependant, en ce qui concerne la vitesse d'exécution, WebAssembly bat JavaScript, avec ses vitesses d'exécution de code quasi natives.
La vitesse est là où WebAssembly brille et la raison pour laquelle il est idéal pour tant d'utilisations. Vous pouvez charger WebAssembly dans un navigateur à l'aide de JavaScript et les deux codes peuvent s'exécuter ensemble et partager des ressources.
WebAssembly contre Docker contre Kubernetes
Docker et Kubernetes sont deux des technologies populaires qui alimentent le cloud informatique. Docker est une technologie de conteneur qui permet aux développeurs de regrouper une application avec toutes ses dépendances système dans un seul package. Cela facilite le déploiement de l'application dans n'importe quel environnement cloud en une seconde ou moins.
Kubernetes, en revanche, est un open-source système pour gérer et déployer des applications conteneurisées telles que Docker, CRI-O, containersd et toute implémentation Kubernetes CRI (Container Runtime Interface). Kubernetes facilite également la mise à l'échelle des déploiements cloud sur plusieurs serveurs ou machines virtuelles.
De ce point de vue, WebAssembly est plus similaire à Docker et peut être exécuté comme une application cloud conteneurisée à l'aide de Kubernetes. Il offre également de nombreux avantages par rapport à Docker, mais ne le remplacera probablement pas.
Au-delà du navigateur
Au début, il y avait les serveurs Web. Vous deviez dédier une machine complète en tant que serveur. Ensuite, il y avait les machines virtuelles, ou VM, qui permettaient à un serveur de fonctionner sur un ou plusieurs threads CPU. Encore fallait-il avoir une VM dédiée.
Cloud computing a permis de lancer et d'exécuter des serveurs uniquement en cas de besoin en conteneurisant les applications. Cela a entraîné une réduction des coûts, car vous ne payez que pour ce que vous utilisez - plus de machines dédiées. Mais il y a encore quelques problèmes.
Premièrement, les fichiers Docker peuvent avoir une taille de plusieurs gigaoctets, ce qui signifie un petit retard dans Commencez et d'autres problèmes de gestion. Cependant, un fichier Wasm similaire ne peut mesurer que quelques Mo car il s’agit d’un binaire précompilé. Cela lui donne un temps de démarrage beaucoup plus rapide que Docker, parfait pour certaines applications urgentes.
Deuxièmement, la conception de WebAssembly signifie que le développeur n'a pas à gérer et à affecter des ressources système, il peut simplement aller droit au but en utilisant le langage de programmation de son choix.
Ces fonctionnalités rendent WebAssembly idéal pour exécuter des micro-services cloud, bien que les applications Docker soient toujours préférables pour les applications qui nécessitent plus de contrôle sur l'environnement d'exploitation et le système de fichiers.
Pour plus d'informations, des projets comme WasmCloud et WasmEdge développent WebAssembly en une plate-forme informatique viable.
Cas d'utilisation Wasm
Il existe de nombreux cas d'utilisation de WebAssembly, compte tenu de sa nature particulière. Ils peuvent être divisés en trois grands groupes; dans le navigateur, en dehors du navigateur et les configurations hybrides.
Le type dans le navigateur est explicite et hors du navigateur fait principalement référence aux déploiements de serveurs, d'IoT et de cloud, tandis que l'hybride fait référence à un mélange des deux.
Voici un aperçu des cas d'utilisation où Wasm peut exceller :
- Code haute performance déjà existant - Code ancien mais merveilleux que vous pouvez simplement porter sur WebAssembly.
- Nouveau code haute performance – Ceux que vous devez concevoir et mettre en œuvre à partir de zéro.
- Porter des applications de bureau sur le Web – Cela pourrait ouvrir une nouvelle génération de solutions de bureau basées sur le Web, telles que montage vidéo sur le Web.
- Cloud computing – Courir aux côtés de Docker et Kubernetes pour de nouvelles opportunités.
Voici un aperçu des applications et des scénarios spécifiques où Wasm peut exceller :
- Montage vidéo et image
- Le design du jeu
- AI applications
- Applications de réalité virtuelle et augmentée
- Applications musicales
- Applications P2P
- Applications côté serveur
- Calculs cloud/cluster
- Conception assistée par ordinateur
- Simulation de plate-forme de système d'exploitation
- Chiffrement
- Serveur Web local
- Applications de bureau à distance
- Visualisations scientifiques
- Applications natives hybrides sur smartphones
- Sur les appareils IdO
Liste des langages et frameworks pris en charge
Plus de 50 langages se compilent en WebAssembly, et voici quelques-uns des plus populaires :
- C
- C + +
- R
- Rubi
- Swift
- Go
- Kotlin
- Calme
- PHP
- blouson – Un framework pour les développeurs .NET.
- JwebAssembly - Compilateur pour le bytecode Java et les langages associés tels que JRuby, Jython, Groovy, Scala et Kotlin.
- bois d'if - Un framework Rust pour créer des applications Web multithreads à l'aide de WebAssembly.
- Script d'assemblage – Un langage spécialement conçu pour créer du code WebAssembly.
- Grain – Un langage fonctionnel fortement typé.
- Motoko
Vous pouvez trouver plus de langues ici.
Liste des runtimes et outils WebAssembly
- Tous les principaux navigateurs prennent en charge Wasm
- Pyodure - Exécution Python sur le navigateur avec la pile scientifique Python, y compris Pandas, NumPy, SciPy.
- chaud
- poids – Pour les micro-services et les applications Web
- Étais-je – Interface système modulaire
- WasmTime – Exécution WebAssembly rapide et sécurisée.
- Wasmer
- Il brille
- wasmCloud – Environnement infonuagique
- Croûtelet – Kublete Kubernetes pour exécuter Wasm, écrit en Rust.
- WasmEdge – Environnement d'exécution cloud et edge
Conclusion
Nous sommes arrivés à la fin de notre voyage dans WebAssembly et ce qu'il contient pour l'informatique. Et comme vous pouvez le voir, il est plein de promesses.
C'est encore un travail en cours, mais en développement constant. Et si vous êtes intéressé, vous pouvez trouver plus d'informations ici, iciet ici.