⚡
web

Web Assembly

Format binaire executant du code a haute performance dans les navigateurs web, complement de JavaScript.

Qu'est-ce que WebAssembly ?

WebAssembly (Wasm) est un format d'instructions binaire conçu pour l'exécution a haute performance dans les navigateurs web. Lance en 2017 et supporte par tous les navigateurs majeurs, Wasm permet d'exécuter du code compilé (C, C++, Rust, Go) dans le navigateur à une vitesse proche du natif. Il ne remplace pas JavaScript mais le complete pour les tâches intensives en calcul.

Fonctionnement technique

Le code source est compilé en un module Wasm binaire (.wasm) à l'aide d'un compilateur spécifique au langage source : Emscripten pour C/C++, wasm-pack pour Rust, TinyGo pour Go. Le navigateur charge le module, le valide (vérification de sécurité en temps constant), le compilé en code machine natif (JIT ou AOT), puis l'instancie avec les imports nécessaires. Wasm s'execute dans un sandbox securise avec le même modèle de sécurité que JavaScript (same-origin policy, pas d'accès direct au système de fichiers).

Cas d'utilisation

Les cas d'utilisation idéaux sont les applications nécessitant des performances elevees : jeux vidéo dans le navigateur (Unity, Unreal Engine compilent en Wasm), édition d'images et de vidéo (Photoshop Web, Figma utilise Wasm), compression et chiffrement, simulations scientifiques, machine learning (inférence de modèles), et emulation (DOSBox en Wasm). Des applications de bureau entières ont été portees dans le navigateur grâce à Wasm : AutoCAD, Google Earth, LibreOffice.

Interaction avec JavaScript

Wasm et JavaScript communiquent via une interface d'appel. JavaScript peut instancier des modules Wasm, appeler leurs fonctions exportees et partager de la mémoire linéaire. Les outils comme wasm-bindgen (Rust) et Emscripten (C++) génèrent automatiquement les bindings entre les deux mondes. La mémoire partagee (SharedArrayBuffer) et les Web Workers permettent le multithreading. Les performances optimales nécessitent de minimiser les allers-retours entre JS et Wasm.

WebAssembly hors du navigateur (WASI)

WASI (WebAssembly System Interface) étend Wasm au-delà du navigateur en fournissant un accès standardise au système d'exploitation (fichiers, réseau, horloge). Les runtimes comme Wasmtime, Wasmer et WasmEdge exécutent des modules Wasm cote serveur. Avantages : portabilité (un seul binaire pour toutes les plateformes), sécurité (sandbox par défaut, capabilities), et démarrage ultra-rapide (microsecondes). Docker et Kubernetes explorent l'intégration de conteneurs Wasm comme alternative légère aux conteneurs Linux.

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions fréquentes

WebAssembly va-t-il remplacer JavaScript ?
Non. Wasm et JavaScript sont complementaires. JavaScript reste le meilleur choix pour la manipulation du DOM, les interactions UI, et la majorite du developpement web. Wasm excelle pour les calculs intensifs et le portage de code existant. Les deux coexistent et communiquent dans la meme application. L'ecosysteme JavaScript est trop vaste et productif pour etre remplace.
Quel langage choisir pour compiler en WebAssembly ?
Rust est le choix le plus populaire grace a son excellent outillage Wasm (wasm-pack, wasm-bindgen) et ses performances sans garbage collector. C/C++ via Emscripten est ideal pour porter du code existant. AssemblyScript (syntaxe TypeScript) a une courbe d'apprentissage douce pour les developpeurs web. Go (TinyGo) est possible mais produit des binaires plus volumineux.

Pages liées

Chaque semaine, le meilleur de la tech française

Tendances, salaires, outils et opportunités — directement dans votre boîte mail.

Gratuit. Desabonnement en un clic. Pas de spam.