Consejos

JavaScript: ¿interpretado o compilado?

JavaScript: ¿interpretado o compilado?

Las computadoras no pueden ejecutar el código que escribes en JavaScript (o cualquier otro idioma). Las computadoras solo pueden ejecutar código de máquina. El código de máquina que puede ejecutar una computadora en particular se define dentro del procesador que ejecutará esos comandos y puede ser diferente para diferentes procesadores.

Obviamente, escribir código de máquina era difícil de hacer para las personas (es 125 un comando de agregar o es 126 o quizás 27). Para solucionar ese problema, se crearon los conocidos como lenguajes ensambladores. Estos lenguajes usaron nombres más obvios para los comandos (como AGREGAR para agregar) y, por lo tanto, eliminaron la necesidad de recordar los códigos exactos de la máquina. Los lenguajes ensambladores todavía tienen una relación uno a uno con el procesador y el código de máquina en particular en los que la computadora convierte esos comandos.

Los lenguajes de ensamblaje deben compilarse o interpretarse

Muy pronto se dio cuenta de que se necesitaban idiomas más fáciles de escribir y que la computadora misma podía usarse para traducirlos a las instrucciones del código de máquina que la computadora realmente puede entender. Se pudieron tomar dos enfoques con esta traducción y se eligieron ambas alternativas (se usará una u otra según el idioma que se use y el lugar donde se ejecute).

Un lenguaje compilado es aquel en el que una vez que se ha escrito el programa, usted alimenta el código a través de un programa llamado compilador y produce una versión de código de máquina del programa. Cuando desee ejecutar el programa, simplemente llame a la versión del código de máquina. Si realiza cambios en el programa, debe volver a compilarlo antes de poder probar el código modificado.

Un lenguaje interpretado es aquel en el que las instrucciones se convierten de lo que ha escrito en el código de la máquina a medida que se ejecuta el programa. Un lenguaje interpretado básicamente obtiene una instrucción de la fuente del programa, la convierte en código de máquina, ejecuta ese código de máquina y luego toma la siguiente instrucción de la fuente para repetir el proceso.

Dos variantes para compilar e interpretar

Una variante utiliza un proceso de dos etapas. Con esta variante, la fuente de su programa se compila no directamente en el código de la máquina, sino que se convierte en un lenguaje similar al ensamblado que aún es independiente del procesador en particular. Cuando desea ejecutar el código, procesa el código compilado a través de un intérprete específico del procesador para obtener el código de máquina apropiado para ese procesador. Este enfoque tiene muchos de los beneficios de la compilación al tiempo que mantiene la independencia del procesador, ya que el mismo código compilado puede ser interpretado por muchos procesadores diferentes. Java es un lenguaje que a menudo usa esta variante.

La otra variante se llama compilador Just in Time (o JIT). Con este enfoque, en realidad no ejecuta el compilador después de haber escrito su código. En cambio, eso sucede automáticamente cuando ejecuta el código. Usando un compilador Just in Time, el código no se interpreta declaración por declaración, se compila todo de una vez cada vez que se llama para ejecutarse y luego la versión compilada que acaba de crear es la que se ejecuta. Este enfoque hace que se parezca mucho al código que se está interpretando, excepto que en lugar de que solo se encuentren errores cuando se alcanza la declaración con el error, cualquier error detectado por el compilador da como resultado que no se ejecute ninguno de los códigos en lugar de todo el código hasta ese momento se ejecuta. PHP es un ejemplo de un lenguaje que generalmente usa la compilación justo a tiempo.

¿Se compila o interpreta JavaScript?

Ahora que sabemos lo que significa el código interpretado y el código compilado, la siguiente pregunta que debemos responder es ¿qué tiene que ver todo esto con JavaScript? Dependiendo exactamente de dónde ejecute su JavaScript, el código puede compilarse o interpretarse o usar cualquiera de las otras dos variantes mencionadas. La mayoría de las veces está ejecutando su JavaScript en un navegador web y allí generalmente se interpreta el JavaScript.

Los idiomas interpretados suelen ser más lentos que los compilados. Hay dos razones para esto. En primer lugar, el código que se debe interpretar debe interpretarse antes de que pueda ejecutarse y, en segundo lugar, eso debe suceder cada vez que se ejecuta la instrucción (no solo cada vez que ejecuta JavaScript, sino que si está en un bucle, entonces debe hacerse todo el tiempo en el ciclo). Esto significa que el código escrito en JavaScript se ejecutará más lentamente que el código escrito en muchos otros idiomas.

¿Cómo nos ayuda saber esto cuando JavaScript es el único idioma disponible para que podamos ejecutarlo en todos los navegadores web? El propio intérprete de JavaScript que está integrado en el navegador web no está escrito en JavaScript. En cambio, está escrito en algún otro idioma que luego se compiló. Lo que esto significa es que puede hacer que su JavaScript se ejecute más rápido si puede aprovechar los comandos que proporciona JavaScript que le permiten descargar la tarea al motor de JavaScript.

Ejemplos para hacer que JavaScript se ejecute más rápido

Un ejemplo de esto es que algunos pero no todos los navegadores han implementado un método document.getElementsByClassName () dentro del motor de JavaScript, mientras que otros aún no lo han hecho. Cuando necesitamos esta funcionalidad en particular, podemos hacer que el código se ejecute más rápido en aquellos navegadores donde el motor de JavaScript lo proporciona mediante el uso de detección de características para ver si el método ya existe y solo crear nuestra propia versión de ese código en JavaScript cuando el motor de JavaScript no lo hace No nos lo proporcione. Si el motor de JavaScript proporciona esa funcionalidad, debería ejecutarse más rápido si la usamos en lugar de ejecutar nuestra propia versión escrita en JavaScript. Lo mismo se aplica a cualquier procesamiento que el motor de JavaScript tenga disponible para que lo llamemos directamente.

También habrá instancias donde JavaScript proporciona múltiples formas de hacer la misma solicitud. En esos casos, una de las formas de acceder a la información puede ser más específica que la otra. Por ejemplo document.getElementsByTagName ('table') 0.tBodies y document.getElementsByTagName ('table') 0.getElementsByTagName ('tbody') ambos recuperan la misma lista de nodos de las etiquetas tbody en la primera tabla de la página web, sin embargo, la primera de estos es un comando específico para recuperar las etiquetas tbody donde el segundo identifica que estamos recuperando etiquetas tbody en un parámetro y otros valores pueden ser sustituidos para recuperar otras etiquetas. En la mayoría de los navegadores, la variante más corta y específica del código se ejecutará más rápido (en algunos casos, mucho más rápido) que la segunda variante, por lo que tiene sentido usar la versión más corta y más específica. También hace que el código sea más fácil de leer y mantener.

Ahora, en muchos de estos casos, la diferencia real en el tiempo de procesamiento será muy pequeña y solo cuando agregue muchas de esas opciones de código juntas, obtendrá una diferencia notable en el tiempo que tarda su código en ejecutarse. Sin embargo, es bastante raro que cambiar su código para que se ejecute más rápido hará que el código sea significativamente más largo o más difícil de mantener, y a menudo lo contrario será cierto. También existe el beneficio adicional de que se puedan crear futuras versiones de motores JavaScript. eso acelera aún más la variante más específica, de modo que usar la variante específica puede significar que su código se ejecutará más rápido en el futuro sin que tenga que cambiar nada.