JavaScript interprété ou compilé?

Les ordinateurs ne peuvent pas réellement exécuter le code que vous écrivez en JavaScript (ou dans tout autre langage d'ailleurs). Les ordinateurs ne peuvent exécuter que du code machine. Le code machine qu'un ordinateur particulier peut exécuter est défini dans le processeur qui va exécuter ces commandes et peut être différent pour différents processeurs.

Évidemment, écrire du code machine était difficile pour les gens (125 est une commande d'ajout ou est-ce 126 ou peut-être 27). Pour contourner ce problème, des langages d'assemblage ont été créés. Ces langages utilisaient des noms plus évidents pour les commandes (comme ADD pour les ajouter) et supprimaient ainsi la nécessité de se souvenir des codes machine exacts. Les langages d'assemblage ont toujours une relation un à un avec le code processeur et machine particulier dans lequel l'ordinateur convertit ces commandes en.

Les langues d'assemblage doivent être compilées ou interprétées

Très tôt, on s'est rendu compte que des langues plus faciles à écrire étaient nécessaires et que l'ordinateur lui-même pouvait être utilisé pour les traduire en instructions de code machine que l'ordinateur pouvait réellement comprendre. Il y avait deux approches qui pouvaient être prises avec cette traduction et les deux alternatives ont été choisies (l'une ou l'autre sera utilisée selon la langue utilisée et l'endroit où elle est exécutée).

Un langage compilé est celui où une fois le programme écrit, vous alimentez le code via un programme appelé compilateur et qui produit une version de code machine du programme. Lorsque vous souhaitez exécuter le programme, vous appelez simplement la version du code machine. Si vous apportez des modifications au programme, vous devez le recompiler avant de pouvoir tester le code modifié.

Un langage interprété est un langage dans lequel les instructions sont converties à partir de ce que vous avez écrit en code machine lors de l'exécution du programme. Un langage interprété obtient essentiellement une instruction de la source du programme, la convertit en code machine, exécute ce code machine, puis récupère l'instruction suivante de la source pour répéter le processus.

Deux variantes sur la compilation et l'interprétation

Une variante utilise un processus en deux étapes. Avec cette variante, la source de votre programme n'est pas compilée directement dans le code machine mais est convertie à la place en un langage de type assembleur qui est toujours indépendant du processeur particulier. Lorsque vous souhaitez exécuter le code, il traite ensuite le code compilé via un interpréteur spécifique au processeur afin d'obtenir le code machine approprié pour ce processeur. Cette approche présente de nombreux avantages de la compilation tout en préservant l'indépendance du processeur, car le même code compilé peut être interprété par de nombreux processeurs différents. Java est un langage qui utilise souvent cette variante.

L'autre variante est appelée un compilateur Just in Time (ou JIT). Avec cette approche, vous n'exécutez pas réellement le compilateur après avoir écrit votre code. Au lieu de cela, cela se produit automatiquement lorsque vous exécutez le code. À l'aide d'un compilateur Just in Time, le code n'est pas interprété instruction par instruction, il est compilé en une seule fois à chaque fois qu'il est appelé pour être exécuté, puis la version compilée qu'il vient de créer est ce qui est exécuté. Cette approche donne l'impression que le code est interprété, sauf qu'au lieu d'erreurs uniquement trouvées lorsque l'instruction avec l'erreur est atteinte, toutes les erreurs détectées par le compilateur entraînent l'exécution d'aucun code au lieu de tout le code jusqu'à ce point en cours d'exécution. PHP est un exemple de langage qui utilise généralement une compilation juste à temps.

JavaScript est-il compilé ou interprété?

Alors maintenant, nous savons ce que signifient le code interprété et le code compilé, la question à laquelle nous devons répondre est la suivante: qu'est-ce que tout cela a à voir avec JavaScript? Selon l'endroit exact où vous exécutez votre JavaScript, le code peut être compilé ou interprété ou utiliser l'une des deux autres variantes mentionnées. La plupart du temps, vous exécutez votre JavaScript dans un navigateur Web et le JavaScript est généralement interprété.

Les langues interprétées sont généralement plus lentes que les langues compilées. Il y a deux raisons à cela. Premièrement, le code à interpréter doit réellement être interprété avant de pouvoir être exécuté et deuxièmement, cela doit se produire à chaque fois que l'instruction doit être exécutée (non seulement à chaque fois que vous exécutez le JavaScript, mais s'il est en boucle, alors il doit être fait à chaque fois dans la boucle). Cela signifie que le code écrit en JavaScript s'exécutera plus lentement que le code écrit dans de nombreux autres langages.

En quoi le fait de savoir cela nous aide-t-il à ce que JavaScript soit la seule langue disponible pour nous à travers tous les navigateurs Web? L'interpréteur JavaScript lui-même intégré au navigateur Web n'est pas écrit en JavaScript. Au lieu de cela, il est écrit dans une autre langue qui a ensuite été compilée. Cela signifie que vous pouvez accélérer l'exécution de JavaScript si vous pouvez tirer parti des commandes fournies par JavaScript qui vous permettent de décharger la tâche sur le moteur JavaScript lui-même..

Exemples pour accélérer l'exécution de JavaScript

Un exemple de cela est que certains navigateurs, mais pas tous, ont implémenté une méthode document.getElementsByClassName () dans le moteur JavaScript alors que d'autres ne l'ont pas encore fait. Lorsque nous avons besoin de cette fonctionnalité particulière, nous pouvons faire en sorte que le code s'exécute plus rapidement dans les navigateurs où le moteur JavaScript le fournit en utilisant la détection des fonctionnalités pour voir si la méthode existe déjà et en ne créant notre propre version de ce code en JavaScript que lorsque le moteur JavaScript ne fonctionne pas. t nous le fournir. Lorsque le moteur JavaScript fournit cette fonctionnalité, il devrait s'exécuter plus rapidement si nous l'utilisons plutôt que d'exécuter notre propre version écrite en JavaScript. Il en va de même pour tout traitement que le moteur JavaScript met à notre disposition pour appeler directement.

Il y aura également des cas où JavaScript offre plusieurs façons de faire la même demande. Dans ces cas, l'un des moyens d'accéder aux informations peut être plus spécifique que l'autre. Par exemple, document.getElementsByTagName ('table') [0] .tBodies et document.getElementsByTagName ('table') [0] .getElementsByTagName ('tbody') récupèrent tous deux la même liste de nœuds des balises tbody dans la première table du Web page cependant la première d'entre elles est une commande spécifique pour récupérer les balises tbody où la seconde identifie que nous récupérons les balises tbody dans un paramètre et d'autres valeurs peuvent être substituées pour récupérer d'autres balises. Dans la plupart des navigateurs, la variante plus courte et plus spécifique du code s'exécutera plus rapidement (dans certains cas, beaucoup plus rapidement) que la deuxième variante et il est donc logique d'utiliser la version plus courte et plus spécifique. Il facilite également la lecture et la maintenance du code.

Maintenant, dans bon nombre de ces cas, la différence réelle dans le temps de traitement sera très petite et ce ne sera que lorsque vous ajouterez de nombreux choix de code ensemble que vous obtiendrez une différence notable dans le temps nécessaire à l'exécution de votre code. Il est cependant assez rare que la modification de votre code pour le rendre plus rapide rendra le code beaucoup plus long ou plus difficile à maintenir, et souvent l'inverse sera vrai. Il y a aussi l'avantage supplémentaire que les futures versions des moteurs JavaScript peuvent être créées qui accélèrent encore plus la variante plus spécifique, de sorte que l'utilisation de la variante spécifique peut signifier que votre code s'exécutera plus rapidement à l'avenir sans que vous ayez à changer quoi que ce soit.