Signification de interprété ou compilé en JavaScript

Les ordinateurs ne peuvent pas réellement exécuter le code que vous écrivez Javascript (ou toute autre langue 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 le code machine était difficile pour les gens à faire (est 125 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 processeur et le code machine particuliers dans lesquels l'ordinateur convertit ces commandes.

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

Très tôt, on s'est rendu compte qu'il était plus facile d'écrire

instagram viewer
langues é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'un ou l'autre sera utilisé selon la langue utilisée et l'endroit où il est exécuté).

Un langage compilé est celui où une fois le programme écrit, vous alimentez le code via un programme appelé compilateur et cela 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 machine code, exécute ce code machine, puis saisit l'instruction suivante de la source pour répéter la 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 au lieu de cela est converti en un langage d'assemblage qui est toujours indépendant du particulier processeur. 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é à 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é tout en un aller à chaque fois qu'il est appelé pour être exécuté, puis la version compilée qu'il vient de créer est ce qui obtient courir. Cette approche donne l'impression que le code est interprété, sauf qu'au lieu d'erreurs uniquement trouvées lorsque l'instruction avec le erreur est atteinte, toutes les erreurs détectées par le compilateur entraînent l'exécution d'aucun du code au lieu de la totalité du code jusqu'à ce point étant courir. 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 êtesexécuter votre JavaScript dans un navigateur Web et là 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 en fait être interprété avant de pouvoir être exécuté et deuxièmement, cela a 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 dans une boucle alors cela 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 votre 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 fonctionnalité détecter si la méthode existe déjà et créer notre propre version de ce code en JavaScript uniquement lorsque le moteur JavaScript ne le fournit pas nous. 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 nous 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') à la fois récupérer la même nodelist des balises tbody dans le premier tableau de la page Web mais 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 Mots clés. 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 rapide) que la deuxième variante et il est donc logique d'utiliser le plus court et plus spécifique version. Cela 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 faible et ce ne sera que lorsque vous ajoutez de nombreux choix de code ensemble, vous obtiendrez une différence notable dans le temps nécessaire à votre code pour courir. Il est assez rare cependant que changer votre code pour le faire fonctionner plus rapidement 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 pour accélérer la variante plus spécifique même en outre, 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.