JavaScript n'est plus le seul langage qui peut être exécuté nativement dans les navigateurs. WebAssembly est sur le point de révolutionner la façon dont vous codez pour le Web, en permettant aux applications natives d'être portées sur le navigateur avec des performances quasi-natives.
Qu'est-ce que WebAssembly exactement?
JavaScript est un langage entièrement interprété. Lorsque vous vous connectez à un site Web, ils envoient le code JavaScript que vous exécutez. Il est généralement réduit (les espaces blancs et les sauts de ligne sont supprimés pour économiser de l'espace), mais vous pouvez ouvrir les outils de développement Chrome et lire directement le code source. Bien que JavaScript soit assez rapide de nos jours, il doit encore être interprété par le moteur JS, ce qui peut prendre un certain temps à analyser et ajoute beaucoup de surcharge. De plus, JavaScript n'est pas exactement performant dès le départ.
WebAssembly, souvent abrégé en Wasm, n'est pas vraiment un «langage» que vous allez écrire à la main. C'est un format d'instructions binaires conçu pour être plus rapide que JavaScript et très proche des langages compilés. C’est toujours un langage interprété, mais il est conçu pour être interprété par des machines et non par des humains.
Parce que Wasm a été conçu à partir de zéro, il a été conçu avec les performances à l'esprit. Il enlève le prototypage complexe de JS, et introduit les primitives appropriées. JS n'a que des flottants pour les nombres – chaque opération mathématique dans JS est effectuée à l'aide de flottants, même si les mathématiques flottantes sont beaucoup plus lentes et inutiles dans la plupart des cas. Wasm fournit des primitives pour les ints et fournit un accès au niveau des octets à la mémoire. Il a un représentation textuelle appelé WebAssembly Text (.wat
), que vous pouvez utiliser pour coder directement. Vous le conditionnerez toujours dans son format binaire pour une utilisation sur le Web. Sous le capot, Wasm court sur un machine virtuelle basée sur la pile, qui traduit les instructions en code réel qui s'exécute sur votre machine.
Parce qu'il ne s'agit que d'un format d'instruction, la magie de Wasm est qu'il peut être utilisé comme cible de compilation portable pour d'autres langages, sans sacrifier la vitesse comme vous le feriez avec le transpiling. Cela inclut des langages comme C ++ et Rust, qui peuvent désormais s'exécuter sur le Web lorsqu'ils sont compilés vers Wasm.
Si votre esprit était juste époustouflé, ce n’est pas théorique – cela fonctionne réellement dans la pratique. AutoDesk a pu porter AutoCAD, une base de code C ++ vieille de 30 ans, vers une application Web basée sur WebAssembly, dans quelques mois, avec une relative facilité. Le portage d'applications natives sur le Web est un cas d'utilisation majeur pour Wasm, et nous commencerons à voir de plus en plus d'applications adopter cette approche à mesure que Wasm poussera ce qui est possible dans le navigateur.
Si vous voulez une démonstration intéressante de la puissance de Wasm, vous l'avez probablement déjà eue –Google Earth s'exécute dans Wasm, rendant des modèles 3D complexes avec des niveaux de LoD transparents et se chargeant lorsque vous volez autour de la planète, le tout à un 60 FPS parfaitement fluide. Ce n’est tout simplement pas possible avec JavaScript.
Si vous souhaitez commencer à travailler avec Wasm, vous pouvez vous diriger vers un terrain de jeu WebAssembly en ligne pour l'essayer.
Wasm va-t-il remplacer JavaScript?
Non. JavaScript reste un langage fantastique, et avec l’utilisation de NPM qui dépasse tous les autres gestionnaires de packages linguistiques, il ne disparaîtra pas de sitôt.
Les moteurs JavaScript modernes comme le V8 sont encore assez rapides, et même s'ils ne permettront pas le même type de performances natives que Wasm, cela reste acceptable pour la plupart des applications Web de base et des scripts simples qui n'ont pas besoin de traiter massivement les données. En gros, vous n’utiliserez pas Wasm pour la création de scripts de base sur votre site Web. Le déclenchement d'une alerte lorsqu'un utilisateur appuie sur un bouton, par exemple, est facilement réalisable par JS, n'a pas besoin d'être suffisamment performant pour s'exécuter un million de fois par seconde et n'a certainement pas besoin d'être écrit en C.
JS est également beaucoup plus accessible, comme le prouve le succès des frameworks JS côté client comme React. Les applications Web créées avec React sont toujours assez rapides et, avec une bonne optimisation du rendu, peuvent fonctionner à 60 FPS sans jank sur la plupart des smartphones.
Cependant, lorsque vous accélérez et que vous souhaitez exécuter une application de bureau dans un navigateur, Wasm va devenir le format de choix. Même quand même, JavaScript est toujours nécessaire pour appeler les méthodes Wasm, et vous allez toujours l'utiliser dans une base de code Wasm.
Wasm sur le bureau
Cela semble un peu contre-intuitif au début, mais Wasm fonctionnant sur le serveur est beaucoup plus raisonnable que vous ne le pensez. WASI, ou WebAssembly System Interface, standardise la manière dont Wasm interagit avec le système et fournit un environnement modulaire permettant à WebAssembly de faire toute sa magie en dehors du navigateur, que ce soit sur votre bureau ou dans un environnement serveur. Avec WASI, les développeurs peuvent écrire la même application pour le natif et le Web, sans avoir à exécuter plus d'instances de Chrome avec Electron.
Dans un sens, cela remplace une grande partie de ce que Docker accomplit. Le fondateur de Docker, Solomon Hykes, l'a même dit. Le code écrit dans n'importe quel langage (ce qui le rend différent de .NET / JVM) peut probablement être compilé vers Wasm et être exécuté sur n'importe quel serveur utilisant WASI. Il extrait le code de la machine (plus de compilation pour un processeur ou un système d'exploitation spécifique) et nécessite simplement que WASI soit compilé et installé sur la machine sur laquelle il s'exécute. Bien que Docker ne disparaisse pas non plus, et à l'avenir, il peut être en mesure d'exécuter des conteneurs Linux, Windows et WASI cote à cote.
Ceci est similaire à la promesse faite par Java: l'environnement d'exécution exécutera le même code sur un hôte Windows ou un hôte Linux. L’argument de vente de Wasm, cependant, est que vous n’avez pas besoin de programmer en Java et que vous êtes libre de choisir des langages plus performants tels que C ++ et Rust.