Le 5 décembre dernier, le W3C a annoncé la standardisation en tant que norme officielle du World Wide Web Consortium du langage WebAssembly. Cette technologie devient donc le quatrième langage exécuté directement dans le navigateur après HTML, CSS et JavaScript.
Définition de WebAssembly
WebAssembly est un bytecode, un code binaire intermédiaire entre le code source et les instructions machines. Il ne peut pas être directement exécuté. Ainsi les développeurs utilisent un langage de haut niveau qui, lui, est compilé en un langage de bas niveau, ici : WebAssembly. Les avantages d’un bytecode sont multiples :
- Portabilité : du fait de son indépendance vis-à-vis du matériel et des différentes architectures.
- Simplicité : car il est plus compact et plus simple à manipuler qu’un script.
- Sécurité : en effet, il s’exécute dans la sandbox de sécurité du navigateur.
- Performance : car les interpréteurs de bytecode sont généralement meilleurs que les interpréteurs de scripts.
WebAssembly a été conçu pour le développement d’applications “complexes” comme les jeux 3D, la réalité virtuelle et augmentée, l’édition d’image/vidéo, etc. Bref des applications qui demandent des performances natives, donc avec un impact positif sur la web performance.
Web Assembly a été conçu pour compléter JavaScript avec des performances supérieures tout en étant exécuté dans un navigateur web. D’ailleurs le support de WebAssembly est déjà assez répandu comme l’indique caniuse.com.
Abbrégé wasm, WebAssembly en est à ses balbutiements et soulève pas mal d’interrogations…
Est-ce qu’à terme WebAssembly remplacera JavaScript ?
Même si nous sommes pas toujours fan du JavaScript, son remplacement par un langage ne changera pas les mauvaises pratiques en bonnes manières… De toute façon, WebAssembly a été conçu pour fonctionner avec JavaScript et non pas pour le suppléer dans l’ensemble de ses fonctions. Leur imbrication est déjà opérationnelle. En effet, on peut charger des modules WebAssembly au sein de JavaScript et partager des fonctionnalités entre les deux.
Il y a fort à parier que les frameworks type angular, react ou vue.js, se dotent de composant WebAssembly pour accélérer les calculs complexes qu’ils ont a effectuer. On notera que l’équipe React de Facebook réfléchirait à remplacer le code de leur DOM virtuel par une version WebAssembly.
Ce qui est très intéressant avec WebAssembly c’est son interopérabilité : on utilise le même code binaire pour tout navigateur plus besoin de faire des cas selon tel ou tel navigateur. JavaScript pourrait donc se voir alléger de certaines parties complexes et non-universelles.
WebAssembly est-il SEO friendly ?
A priori, WebAssembly n’est pas plus et pas moins SEO friendly que JavaScript. Le référencement naturel d’un code WebAssembly a donc les mêmes contraintes que le JavaScript. Pour pouvoir être indexer par les moteurs de recherche les applications utilisant angular, react ou vue.js et donc désormais WebAssembly passent par un pré-rendu coté serveur .
C’est clairement pas l’optimum. Mais là encore (comme pour CSS Houdini), ce n’est pas le langage qui est en cause mais l’usage qui en est fait. Si le 4ème principe, selon les bonnes pratiques d’Opquast, était respecté on en serait pas là :
Développer des interfaces enrichissables
Développez d’abord vos applications sans Javascript ni Ajax pour qu’elle fonctionnent dans tous les contextes.
Mais philosophiquement, WebAssembly nous pose un autre cas de conscience…
Quid du caractère ouvert d’un code compilé ?
WebAssembly est un code compilé. Ce qui signifie : Adieu, Ctrl + U ! Adieu, view code source ! Adieu, voir le code source ! Ayant appris mon métier en regardant des sources de toutes provenances, je ne peux que me désoler face à toute offuscation d’un code source.
Dans le même temps, Saint Tim Berners-Lee lance son Contrat Pour Le Web, ayant pour baseline “un plan d’action mondial pour rendre notre monde en ligne sûr et responsabilisant pour tous”. Notez le paradoxe de la standardisation au W3C d’un langage compilé par rapport au point 3 du principe 6 “Développer des technologies qui soutiennent le meilleur de l’humanité et luttent contre le pire” énoncé ainsi :
En investissant dans les communs numériques et en les soutenant :
1 – En respectant et en développant davantage les standards Web ouverts.
2 – En faisant la promotion de l’inter-opérabilité, des technologies open-source, du libre accès, des connaissances libres et des pratiques et valeurs ouvertes en matière de données.
Même en envisageant la possibilité d’une option du type source map, on s’éloigne quelques peu d’un Web ouvert…
Source : web.developpez.com