Alors que les applications Web deviennent de plus en plus riches et que les connexions haut-débit se démocratisent jusqu'au smartphone, certains perçoivent plusieurs problèmes dans la nature du langage Web actuel, notamment au niveau du JavaScript. Avec WebAssembly, l'objectif est de l'optimiser pour que le code se comporte comme celui d'un véritable logiciel.
Cette semaine, les principaux éditeurs de navigateurs ont commencé à implémenter la technologie. Pour illustrer ces efforts, ils ont notamment conçu un portage du jeu AngryBots de Unity. Pour le tester il faudra télécharger la dernière version de Chrome Canary et activer la fonctionnalité chrome://flags/#enable-webassembly. WebAssembly est également intégré au sein des dernières builds de Firefox Nightly. Après avoir saisi about:config il faudra paramétrer l'option javascript.options.wasm sur la valeur true.
Microsoft n'est pas en reste et présente une prise en charge expérimentale au sein du moteur Chakracore désormais publié en open source. Ci-dessous l'éditeur partage une courte vidéo de démonstration au sein du navigateur Edge :
Enfin de son coté Apple explique être aussi entrain d'intégrer les premiers composants au sein du moteur de WebKit.
Du Web au natif
Plusieurs efforts ont déjà été effectués en la matière. En 2011, Google présentait notamment Native Client, un kit de développement composé d'une série d'interfaces de programmation ainsi que d'une documentation visant à permettre la mise au point de modules écrits en C ou en C++ . Ces derniers sont alors capables de communiquer avec des éléments HTML ou JavaScript exécutés au sein du navigateur. Le code est ensuite exécuté au sein d'un bac à sable (sandbox), censé garantir la sécurité de la machine hôte.En portant le moteur graphique Unreal Engine sur le Web, Mozilla présentait pour sa part en 2013 asm.js, un sous-ensemble de JavaScript pouvant être exécuté à bas niveau et compilé en langage natif C/C++ avec Emscripten avant exécution.
Javascript ne meurt pas mais évolue
Mais alors pourquoi continuer à utiliser JavaScript si celui-ci n'est pas optimisé et s'il existe des environnements alternatifs de type .NET ?D'une part, le JavaScript est actuellement très répandu, d'autre part, il est agnostique et fonctionnera aussi bien sur les architectures ARM ou x86. Enfin, les scripts restent confinés aux navigateurs et, à moins que ces derniers, ou un de leurs plugins, ne présentent une faille, ils n'affecteront pas le système.
Aussi plusieurs technologies en réflexion au W3C se sont greffées autour de JavaScript, comme WebGL, pour communiquer avec les pilotes des GPU. Plusieurs interfaces de programmation ont vu le jour pour qu'une page Web puisse prendre le contrôle de la webcam ou des microphones. Par ailleurs, si d'autres langages ont été conçus pour optimiser le JavaScript, par exemple au niveau de la syntaxe, ils requièrent tout de même sa prise en charge par le navigateur. C'est par exemple le cas de TypeScript conçu par Microsoft.
Brendan Eich
WebAssembly : le bytecode du Web
En partant des travaux portés sur asm.js, Brendan Eich, créateur du langage JavaScript et brièvement ex-PDG de Mozilla, présente WebAssembly, un bytecode pour le Web ou un code intermédiaire entre l'application Web et les instructions machines. WebAssembly rassemble Google, Microsoft, Apple et Mozilla.Avec WebAssembly, l'exécution d'un JavaScript classique serait 20 fois plus rapide. Il faut dire que le bytecode permet de véritablement cibler les instructions Javascript vers les composants de la machine nécessaires à les exécuter.
Si asm.js a été strictement pensé pour optimiser les performances de JavaScript, WebAssembly a pour objectif d'en faire un standard et, à terme, de se transformer en bytecode pour n'importe quel autre langage Web. Enfin, puisqu'il se présente comme un bytecode agnostique du langage, WebAssembly serait davantage optimisé au niveau de la décompression.
De toute évidence, si les plus grands acteurs de la Toile soutiennent le projet, le Web devrait bel et bien continuer de s'enrichir et le JavaScript est loin d'être enterré. Reste à savoir quand Internet Explorer, Firefox, Chrome ou Safari seront compatibles avec ce nouveau bytecode.
- Les développeurs retrouveront davantage d'informations sur cette page.
A lire également :
- Mozilla annonce asm.js et porte le moteur Unreal Engine 3 sur le web
- Exécuter du code natif dans Chrome avec Google Native Client
- Brendan Eich, PDG de Mozilla, contraint de démissionner sous la pression
Article initialement publié le 18/06/2015