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 concu pour l'execution a haute performance dans les navigateurs web. Lance en 2017 et supporte par tous les navigateurs majeurs, Wasm permet d'executer du code compile (C, C++, Rust, Go) dans le navigateur a une vitesse proche du natif. Il ne remplace pas JavaScript mais le complete pour les taches intensives en calcul.

Fonctionnement technique

Le code source est compile en un module Wasm binaire (.wasm) a l'aide d'un compilateur specifique au langage source : Emscripten pour C/C++, wasm-pack pour Rust, TinyGo pour Go. Le navigateur charge le module, le valide (verification de securite en temps constant), le compile en code machine natif (JIT ou AOT), puis l'instancie avec les imports necessaires. Wasm s'execute dans un sandbox securise avec le meme modele de securite que JavaScript (same-origin policy, pas d'acces direct au systeme de fichiers).

Cas d'utilisation

Les cas d'utilisation ideaux sont les applications necessitant des performances elevees : jeux video dans le navigateur (Unity, Unreal Engine compilent en Wasm), edition d'images et de video (Photoshop Web, Figma utilise Wasm), compression et chiffrement, simulations scientifiques, machine learning (inference de modeles), et emulation (DOSBox en Wasm). Des applications de bureau entieres ont ete portees dans le navigateur grace a 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 memoire lineaire. Les outils comme wasm-bindgen (Rust) et Emscripten (C++) generent automatiquement les bindings entre les deux mondes. La memoire partagee (SharedArrayBuffer) et les Web Workers permettent le multithreading. Les performances optimales necessitent de minimiser les allers-retours entre JS et Wasm.

WebAssembly hors du navigateur (WASI)

WASI (WebAssembly System Interface) etend Wasm au-dela du navigateur en fournissant un acces standardise au systeme d'exploitation (fichiers, reseau, horloge). Les runtimes comme Wasmtime, Wasmer et WasmEdge executent des modules Wasm cote serveur. Avantages : portabilite (un seul binaire pour toutes les plateformes), securite (sandbox par defaut, capabilities), et demarrage ultra-rapide (microsecondes). Docker et Kubernetes explorent l'integration de conteneurs Wasm comme alternative legere aux conteneurs Linux.

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions frequentes

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 liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.