Las computadoras no pueden ejecutar el código en el que escribes JavaScript (o cualquier otro idioma para el caso). 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, código de máquina de escribir fue difícil para la gente hacer (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 de ensamblaje aún 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 era más fácil escribir
idiomas eran necesarios y que la computadora en sí misma podría usarse para traducirlos en 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 utilizará uno u otro según el idioma que se utilice 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 eso 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 máquina código, 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 en su lugar, se convierte a un lenguaje similar al ensamblado que aún es independiente del particular procesador. 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 en uno ir cada vez que se llama para ejecutarse y luego la versión compilada que acaba de crear es lo que obtiene correr. Este enfoque hace que se parezca mucho al código que se está interpretando, excepto que en lugar de errores solo se encuentran cuando la declaración con el se alcanza el error, cualquier error detectado por el compilador da como resultado que ninguno de los códigos se ejecute en lugar de todo el código hasta ese momento correr. PHP es un ejemplo de un lenguaje que generalmente usa la compilación justo a tiempo.
¿Se compila o interpreta JavaScript?
Entonces, ahora que sabemos qué significan 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 parte del tiempo eresejecutar tu JavaScript en un navegador web y allí se suele interpretar el JavaScript.
Los idiomas interpretados suelen ser más lentos que los idiomas compilados. Hay dos razones para esto. En primer lugar, el código que debe interpretarse debe interpretarse antes de poder ejecutarse y, en segundo lugar, sucederá cada vez que se ejecute la instrucción (no solo cada vez que ejecute JavaScript, sino si está en un lazo entonces debe hacerse todo el tiempo alrededor del 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 particular, podemos hacer que el código se ejecute más rápido en aquellos navegadores donde el motor de JavaScript lo proporciona mediante la función detectar 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 proporciona nosotros. 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 ponga a nuestra disposición 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 recuperar la misma lista de nodos de las etiquetas tbody en la primera tabla de la página web, sin embargo, la primera de ellas 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 otros 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 el más corto y más específico versión. 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 será cuando agrega muchas de esas opciones de código juntas para obtener una diferencia notable en el tiempo que tarda su código en correr. 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 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 que aceleren la variante más específica, incluso Además, el uso de 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.