Qu’est-ce que le moteur JavaScript et comment ça marche

Récemment, nous avons lancé une série visant à enseigner aux développeurs Web comment fonctionne JavaScript et quels sont les différents composants qui rendent le processus de compilation et d’exécution de code en JavaScript rapide et simple.

Le premier article de cette série était un aperçu du moteur JavaScript, de la pile d’appels et de l’environnement d’exécution. Dans cette deuxième partie de cette série de didacticiels JavaScript, nous nous concentrerons sur les parties internes du moteur JavaScript et découvrirons pourquoi JavaScript n’est plus un langage de programmation interprété.

Si vous l’avez manqué ou si vous avez besoin d’un rappel, assurez-vous de lire la première partie de notre série : Comment JavaScript fonctionne dans les coulisses.

Qu’est-ce que le moteur JavaScript ?

Le moteur JavaScript est un programme dont la responsabilité est d’exécuter du code JavaScript. Tous les navigateurs modernes sont livrés avec leur propre version du moteur JavaScript, mais le plus populaire est le moteur V8 de Google. Le moteur V8 de Google alimente les navigateurs Google Chrome, ainsi que Node.js. Node.js est un runtime JavaScript utilisé pour créer des applications côté serveur en dehors du navigateur.

Voici une liste des différents moteurs JavaScript pour chaque navigateur Internet majeur :

  • V8 – Moteur JavaScript open-source développé par Google pour Chrome
  • AraignéeSinge – Le moteur JavaScript de Mozilla Firefox
  • JavaScriptCore – Moteur JavaScript open-source développé par Apple pour Safari
  • Rhinocéros Moteur JavaScript open-source géré par la fondation Mozilla pour FireFox
  • Chakra – Un moteur JavaScript pour Microsoft Edge
  • JerryScript – Un moteur JavaScript pour l’Internet des Objets (Iot).

Maintenant que nous comprenons ce qu’est un moteur JavaScript, nous pouvons jeter un coup d’œil plus profond sous le capot et en apprendre davantage sur les différents composants de JavaScript. Donc, avec ce regard sur le moteur derrière nous, dans la section suivante, nous discuterons de la façon dont le code JavaScript est compilé en code machine afin qu’il puisse être exécuté.

Lis: Les 10 meilleures alternatives AngularJS

Comment fonctionnent la compilation et l’interprétation JavaScript ?

Commençons par comprendre les différences entre un compilateur et un interpréteur. Comme les développeurs Web le savent peut-être, un ordinateur ne peut comprendre que les 0 et les 1 (considérez-les comme de simples interrupteurs marche/arrêt). C’est pourquoi chaque programme informatique doit finalement être converti en code machine. Cette tâche est effectuée à l’aide d’un processus appelé compilation ou interprétation. Nous examinons chacun de ces processus dans la section suivante.

Qu’est-ce que la compilation en programmation ?

Lors de la compilation, l’intégralité du code source est convertie en code machine en une seule fois. Le code machine est écrit dans un fichier portable qui peut être exécuté n’importe où, quelle que soit la plate-forme ou le système d’exploitation. Il y a deux étapes impliquées dans le processus de compilation du code. Dans la première étape, le code machine est construit et dans la deuxième étape, il est exécuté sur la machine.

L’exécution du code machine se produit juste après la compilation. Par exemple, toute application que vous utilisez actuellement sur votre ordinateur a d’abord été compilée et vous pouvez maintenant l’exécuter sur votre machine.

Fonctionnement de la compilation JavaScript

Lis: Présentation de Garbage Collection en JavaScript

Qu’est-ce que l’interprétation en programmation ?

D’autre part, lors de l’interprétation, l’interpréteur parcourt le code source et l’exécute ligne par ligne. Contrairement à la compilation, qui implique un processus en deux étapes, dans l’interprétation, le code est lu et exécuté à la fois. Bien sûr, le code source doit encore être converti en langage machine, mais la conversion du code ne se produit pas à l’avance, mais plutôt juste avant l’exécution.

Exemple d'interprétation JavaScript

Qu’est-ce que la compilation juste à temps ?

JavaScript est un langage purement interprété. Le problème d’être un langage interprété, cependant, est que les langages de programmation interprétés sont beaucoup plus lents en termes de performances que les langages compilés. Cela représente un problème pour les applications modernes qui nécessitent un traitement rapide et des performances élevées. Imaginez simplement que vous jouez à un jeu en ligne sur votre navigateur et que, lorsque vous déplacez un cube à travers une tuile, il faut plusieurs secondes pour atteindre le point final. Une telle lenteur serait-elle acceptable ?

Beaucoup de gens appellent encore JavaScript un langage de programmation interprété, mais ce n’est plus le cas. Le moteur JavaScript actuel utilise à la fois le concept de compilation et d’interprétation, connu sous le nom de Juste à temps (JAT) compilation.

Dans cette approche, l’ensemble du code source est compilé en langage machine en une seule fois, puis il est exécuté. Il y a encore deux étapes impliquées dans le en avance compilation, mais il n’y a pas de fichier portable à exécuter. Il s’agit d’une solution parfaite pour les applications Web exigeantes en performances rapides d’aujourd’hui, car ce processus est beaucoup plus rapide que la simple exécution du code ligne par ligne. Cette inclusion de la compilation JIT est la raison pour laquelle JavaScript n’est techniquement plus un langage de programmation interprété.

Comment fonctionne la compilation juste-à-temps (JIT) ?

Alors, comment fonctionne le compilateur JavaScript Just-in-Time ? Lorsqu’un nouveau morceau de code JavaScript entre dans le moteur JavaScript, la première étape consiste à analyser le code. Au cours de ce processus, le code est analysé dans une structure de données appelée Arbre de syntaxe abstraite (AST).

L’arbre de syntaxe abstraite divise d’abord chaque ligne de code en morceaux significatifs pour JavaScript, tels que le laisser, statiqueou fonction mots clés. Il enregistre ensuite ces morceaux de code dans une structure arborescente. L’étape suivante vérifie s’il y a des erreurs de syntaxe et, si aucune n’est trouvée, l’arbre résultant est utilisé pour générer le code machine.

Voyons maintenant un exemple rapide de JIT en action. Dans l’extrait de code JavaScript suivant, nous avons déclaré une variable sur le côté gauche, et, sur le côté droit, il y a son équivalent AST :

Compilation JIT expliquée

Exemple JavaScript JIT

Ici, nous avons déclaré un constante variable avec le nom val et lui a donné la valeur 45. Comme vous pouvez le voir du côté de l’arborescence AST, outre la déclaration, il y a beaucoup de code supplémentaire. Pouvez-vous imaginer tout le code superflu qui serait généré dans une grande application ?

Dans l’étape suivante, l’AST généré est compilé en code machine. Ensuite, ce langage machine est exécuté. C’est ainsi que JavaScript moderne utilise la compilation juste-à-temps. N’oubliez pas que le processus d’exécution du code machine se déroule dans la pile d’appels du moteur JavaScript.

Pile d'appels JavaScript

Jusqu’ici tout va bien – à ce stade, notre code est en cours d’exécution et cela devrait être la fin du processus. Pas si vite – JavaScript a des stratégies d’optimisation de code à mettre en œuvre. Au début, JavaScript crée un code machine très peu optimisé afin qu’il puisse exécuter les scripts aussi rapidement que possible. Ensuite, en arrière-plan, ce code non optimisé est recompilé et optimisé, tandis que le code actuel est exécuté. Cela se fait la plupart du temps et après chaque cycle d’optimisation, le code non optimisé est échangé contre le code le plus optimisé, sans jamais arrêter l’exécution. C’est pourquoi le moteur JavaScript fonctionne si vite.

Le processus d’optimisation du code se déroule dans des threads spéciaux, séparés du thread principal. Les développeurs JavaScript ne peuvent pas accéder à l’algorithme d’optimisation du code à partir de notre code source. Bien que différents moteurs implémentent la stratégie de différentes manières, en un mot, c’est ainsi que fonctionne la compilation moderne JavaScript Just-in-time.

Lis: Outils et bibliothèques HTML, CSS et JavaScript

Leave a Comment