Un regard sur l'avenir de JavaScript

Publié: 2022-03-11

Chaque marché est régi par certains concepts communs, et le développement JavaScript ne fait pas exception.

Le cycle de vie du produit est un concept que vous pouvez appliquer à plusieurs environnements différents pour comprendre et prévoir leur comportement. C'est un concept commercial qui nous aide à comprendre les étapes que traverse un produit au cours de sa vie, expliquant l'impact de ces étapes sur sa mesure de popularité - dans la plupart des cas, les ventes. Si nous observons les modèles de comportement du marché, nous pouvons estimer le stade actuel d'un produit et donc faire des prédictions sur sa popularité.

Schéma du cycle de développement du produit

Il y a quatre étapes : introduction, croissance, maturité et déclin, et sur le graphique ci-dessus, vous pouvez voir l'impact sur les ventes de produits attendues pour chaque étape. Par exemple, les ventes de smartphones n'augmentent pas comme il y a cinq ans - en fait, c'est plutôt le contraire qui est vrai - nous pouvons donc dire que les smartphones entrent dans leur phase de maturité.

Au cours des dernières années, nous avons assisté à l'introduction de nombreuses nouvelles technologies dans JavaScript, mais nous avons eu besoin de temps pour voir comment le marché allait les adopter. Personne ne veut être le spécialiste d'une autre technologie prometteuse qui se termine par une adoption nulle. Maintenant, cependant, il est temps de jeter un autre regard. Dans cet article, j'examinerai à quel point JavaScript devient populaire et les facteurs qui ont pu affecter cette popularité, et j'essaierai de prédire à quoi ressemblera l'avenir de JavaScript.

L'avenir des fonctionnalités du langage JavaScript

Depuis que l'Association européenne des fabricants d'ordinateurs (ECMA) a établi le cycle de publication annuel pour ECMAScript, une spécification JavaScript standardisée, nous n'avons pas vu beaucoup de nouvelles fonctionnalités arriver dans le langage, juste quelques-unes chaque année. Cela pourrait être l'une des raisons pour lesquelles nous avons constaté une augmentation de l'adoption de langages compilés vers ES5 comme TypeScript ou ReasonML, apportant tous deux des fonctionnalités au langage très demandées par la communauté. Ce n'est pas nouveau - JavaScript est déjà passé par ce processus (CoffeeScript) et, à la fin, ces fonctionnalités ont fini par être fusionnées dans la norme de langage elle-même, et c'est probablement l'avenir auquel nous pouvons nous attendre pour ces nouvelles fonctionnalités typées également.

Mais maintenant, nous commençons à voir un changement de jeu sur le marché de la compilation vers js avec la disponibilité croissante de WebAssembly dans les navigateurs. Maintenant, nous pouvons utiliser presque n'importe quel langage et le compiler pour qu'il s'exécute à une vitesse presque native dans un navigateur et, plus important encore, nous commençons à voir la prise en charge de fonctionnalités à l'épreuve du temps comme la prise en charge des threads qui nous permettront de tirer parti du multi -Architecture de processeur qui représente l'avenir inévitable de tous les appareils.

La chaîne d'outils officielle de WebAssembly vous aidera à compiler C/C++, mais il existe de nombreux compilateurs fournis par la communauté pour différents langages, tels que Rust, Python, Java et Blazor (C#).

En particulier, la communauté Rust est assez active et nous avons commencé à voir des frameworks frontaux complets comme Yew et Dodrio.

Cela apporte de nombreuses nouvelles possibilités aux applications basées sur un navigateur, et il vous suffit de tester certaines des excellentes applications construites avec WebAssembly pour voir que les applications basées sur un navigateur quasi natives sont désormais une réalité, par exemple Sketchup ou Magnum.

L'adoption des langages typés qui compilent vers ES5 est suffisamment mature, les joueurs sont bien établis et ils ne disparaîtront pas (ou ne seront pas fusionnés avec ES) dans un avenir proche, mais nous verrons un lent changement en faveur des langages typés avec WebAssembly.

la toile

Cadres frontaux

Chaque année, nous assistons à une grande bataille sur le marché des frameworks front-end pour le Web, et React est le vainqueur indiscutable de ces dernières années - depuis l'introduction de leur technologie qui change la donne, le DOM virtuel, nous avons vu presque adoption obligatoire de leurs homologues afin de rester pertinent dans la bataille.

Il y a quelques années, nous avons vu l'introduction d'une nouvelle approche radicale du développement d'applications Web avec Svelte, le "framework de compilation" qui disparaît au moment de la compilation, laissant un code JavaScript petit et très efficace. Cependant, cette fonctionnalité n'était pas suffisante pour convaincre la communauté de passer à Svelte, mais avec le lancement récent de Svelte 3.0, ils ont introduit une véritable programmation réactive dans le cadre et la communauté est ravie, alors peut-être assistons-nous à la prochaine grande chose devant -cadres de fin.

Inspiré par l'opérateur de destin :

 var a = 10; var b <= a + 1; a = 20; Assert.AreEqual(21, b);

Svelte apporte de la réactivité à JavaScript en surchargeant l'utilisation des instructions d'étiquette avec de la réactivité au moment de la compilation en demandant au code d'être exécuté dans l'ordre topologique :

 var a = 10; $: b = a + 1; a = 20; Assert.AreEqual(21, b);

C'est une nouvelle idée radicale qui pourrait aider dans différents contextes, donc le créateur de Svelte travaille également sur svelte-gl, un framework de compilateur qui générera des instructions WebGL de bas niveau directement à partir d'un graphe de scène 3D déclaré en HTMLx.

Inutile de dire que React, Angular et Vue.js ne disparaîtront pas du jour au lendemain, leurs communautés sont énormes et ils resteront pertinents pendant plusieurs années à venir - nous ne savons même pas si Svelte sera le véritable successeur, mais nous peut être sûr de quelque chose : nous utiliserons quelque chose de différent tôt ou tard.

WebXR et l'avenir du Web immersif

La réalité virtuelle a du mal depuis 60 ans à trouver une place dans le courant dominant, mais la technologie n'était tout simplement pas encore prête. Il y a moins de dix ans, lorsque Jon Carmack a rejoint Oculus VR (qui fait maintenant partie de Facebook Technologies, LLC), une nouvelle vague de VR a commencé à se développer, et depuis lors, nous avons vu beaucoup de nouveaux appareils prenant en charge différents types de VR et bien sûr la prolifération des applications compatibles VR.

Les éditeurs de navigateurs ne voulaient pas perdre cette opportunité, ils ont donc rejoint la spécification WebVR permettant la création de mondes virtuels en JavaScript avec WebGL et des bibliothèques bien établies comme three.js. Cependant, la part de marché des utilisateurs avec des appareils 6dof était encore insignifiante pour les déploiements Web massifs, mais le Web mobile était toujours en mesure de fournir une expérience 3D avec l'API d'orientation de l'appareil, nous avons donc vu un tas d'expériences et beaucoup de vidéos 360 pour quelque temps.

En 2017, avec l'introduction d'ARKit et d'ARCore, de nouvelles fonctionnalités ont été apportées aux appareils mobiles et à toutes sortes d'applications avec des expériences AR et MR.

Cependant, il semble toujours un peu anormal de télécharger une application spécifique pour une expérience AR spécifique lorsque vous explorez votre monde autour de vous. Si nous ne pouvions avoir qu'une seule application pour explorer différentes expériences… Cela semble familier. Nous avons résolu ce problème dans le passé avec le navigateur, alors pourquoi ne pas essayer à nouveau ?

L'année dernière, Mozilla a présenté la WebXR Device API Spec (dont le dernier projet de travail, au moment de la rédaction de cet article, date d'il y a deux semaines) pour apporter les capacités AR, VR et MR (ergo XR) au navigateur.

Quelques-uns des fournisseurs de navigateurs les plus importants ont suivi leur implémentation, à une exception près : Safari mobile, donc pour prouver leur point de vue, Mozilla a publié un navigateur compatible WebXR sous la plate-forme iOS WebXR Viewer.

Maintenant, c'est une étape importante car la combinaison de la RA et de la VR apporte 6dof aux appareils mobiles et aux casques basés sur des appareils mobiles comme Google Cardboard ou le Samsung Gear VR, comme vous pouvez le voir dans cet exemple, augmentant la part de marché des appareils 6dof de une grande marge et permettant la possibilité d'un déploiement web à grande échelle.

Dans le même temps, les gars de Mozilla ont travaillé sur un nouveau framework web pour faciliter la création de mondes et d'applications 3D appelé A-Frame, un framework déclaratif à base de composants avec une syntaxe HTML basée sur three.js et WebGL, ayant juste une chose en tête : ramener le plaisir et la facilité d'utilisation à la programmation Web.

Cela fait partie de leur croisade vers le Web immersif, un nouvel ensemble d'idées sur la façon dont le Web devrait ressembler à l'avenir. Heureusement pour nous, ils ne sont pas seuls, et nous commencerons à voir de plus en plus d'expériences immersives sur le web.

Si vous voulez l'essayer, téléchargez la visionneuse WebXR et visitez ce site pour voir les possibilités du Web immersif.

Encore une fois, les applications standard basées sur un navigateur ne disparaîtront pas dans un an ou deux - nous les aurons probablement toujours. Mais les applications 3D et les expériences XR se développent et le marché est prêt et impatient de les avoir.

Support natif pour ES6

Presque toutes les technologies inventées en JavaScript au cours de la dernière décennie ont été créées pour résoudre les problèmes générés par l'implémentation sous-jacente des navigateurs, mais la plate-forme elle-même a beaucoup mûri au cours de ces dernières années, et la plupart de ces problèmes ont disparu, comme nous pouvons le voir. avec Lodash, qui régnait autrefois sur les performances de référence.

La même chose se produit avec le DOM, dont les problèmes étaient autrefois la véritable source d'inspiration pour la création de frameworks d'applications Web. Désormais, il s'agit d'une API mature que vous pouvez utiliser sans framework pour créer des applications. En fait, c'est ce que sont les composants Web. Ils constituent le «cadre» de la plate-forme pour créer des applications basées sur des composants.

Une autre partie intéressante de l'évolution de la plateforme est le langage lui-même. Nous utilisons Babel.js depuis quelques années pour pouvoir utiliser les dernières fonctionnalités d'ECMAScript, mais comme la norme elle-même a commencé à stagner un peu ces dernières années, c'était assez de temps pour permettre aux éditeurs de navigateurs pour implémenter la plupart de leurs fonctionnalités, y compris la prise en charge native de l'instruction d'importation statique. Alors maintenant, nous pouvons commencer à envisager la création d'applications sans Babel.js ou d'autres compilateurs puisque nous avons (encore) le support des fonctionnalités du langage dans la plate-forme elle-même, et puisque Node.js utilise la même VM V8 que Google Chrome , nous avons commencé à voir une meilleure prise en charge d'ES6 dans Node.js, même avec l'instruction d'importation statique sous l'indicateur experimental-modules.

Cela ne signifie pas que nous cesserons de voir des applications compilées à un niveau professionnel, mais cela signifie que commencer avec une application basée sur un navigateur sera facile et amusant comme avant.

JavaScript côté serveur

Même si JavaScript a commencé côté serveur en 1995 avec Netscape Enterprise Server, ce n'est que lors de la présentation de Ryan Dahl en 2009 que JavaScript a commencé à être sérieusement envisagé pour les applications côté serveur. Beaucoup de choses se sont passées au cours de la dernière décennie avec Node.js. Il a beaucoup évolué et mûri, créant une fois de plus l'opportunité de perturbations et de nouvelles technologies.

Dans ce cas, il vient de la main de son propre créateur, Ryan Dahl, qui a travaillé sur une nouvelle perspective d'applications sécurisées côté serveur avec Deno, une plate-forme qui prend en charge nativement les dernières fonctionnalités de langage comme async/await, et également le langage de compilation le plus populaire TypeScript, ciblant les meilleures performances grâce à leur implémentation dans Rust et l'utilisation de Tokio, mais surtout avec une nouvelle philosophie de sécurité qui le différencie de la plupart des plates-formes côté serveur comme Python, Ruby ou Java). Inspiré du modèle de sécurité du navigateur, Deno vous permettra d'utiliser les ressources de l'hôte uniquement après que l'utilisateur a explicitement accordé les autorisations au processus, ce qui peut sembler un peu fastidieux au début, mais cela peut entraîner de nombreuses implications en autorisant nous permet d'exécuter du code non sécurisé dans un environnement sécurisé en faisant simplement confiance à la plate-forme.

Node.js sera toujours là à l'avenir, mais nous commencerons peut-être à voir des services sans serveur comme AWS Lambda et Azure Functions pour fournir la fonctionnalité Deno comme alternative pour fournir une exécution de code côté serveur non sécurisée sur leurs systèmes.

Conclusion

Nous vivons une époque passionnante dans le monde JavaScript : de nombreuses technologies ont suffisamment mûri pour laisser place à l'innovation, la communauté active n'a jamais cessé de nous étonner avec leurs idées brillantes et incroyables, et nous attendons de nombreuses nouvelles alternatives aux outils bien établis. puisque leurs stades de maturité arrivent rapidement; nous n'arrêterons pas de les utiliser car beaucoup d'entre eux sont vraiment bons et il y a beaucoup de preuves sur le champ de bataille, mais de nouveaux marchés passionnants commenceront à émerger, et vous feriez mieux d'être préparé.

Rester à jour avec les dernières nouveautés du monde JavaScript n'est pas facile, en raison du rythme de développement, mais certaines sources peuvent vraiment aider. Premièrement, la source d'information la plus importante, à mon avis, est Echo JS, où vous pouvez trouver une quantité incroyable de nouveaux contenus toutes les heures. Cependant, si vous n'avez pas le temps, la newsletter JavaScript Weekly est un excellent résumé de la semaine en JS. En plus de cela, il est également important de garder un œil sur les conférences à travers le monde, et les chaînes YouTube telles que JSConf, React Conf et Google Chrome Developers sont merveilleusement utiles.

Inversement, si vous souhaitez voir une critique constructive de la direction que prend JavaScript, je vous recommande de lire En tant que développeur JS, C'est ce qui m'empêche de dormir la nuit par son collègue développeur JavaScript Justen Robertson.


Lectures complémentaires sur le blog Toptal Engineering :

  • TypeScript vs JavaScript : votre guide de référence