En la actualidad, JavaScript es un lenguaje de propósito general. Es decir, que puede ser ejecutado en una amplia variedad de entornos.
Tradicionalmente, JavaScript ha estado estrechamente asociado con el desarrollo web (y lo sigue estando). Pero hoy en día podemos emplearlo en muchos otros ámbitos.
Para ejecutar JavaScript, únicamente necesitamos un intérprete que sea capaz de ejecutar el código.
El intérprete (o runtime) es un programa que lee el código fuente y lo ejecuta directamente, línea por línea.
JavaScript en los navegadores web
Desde sus inicios, uno de sus principales usos ha sido añadir interactividad a las páginas web. En este contexto, es el propio navegador web es el que hace de intérprete de JavaScript.
Cuando se carga una página web, el navegador (Chrome, Firefox, Safari, etc) recibe el código JavaScript como parte del contenido de la Web.
El motor de JavaScript incorporados en los navegadores (como V8 en Google Chrome, SpiderMonkey en Firefox y JavaScriptCore en Safari) se encargan de la tarea de interpretar y ejecutar este código.
Los motores de JavaScript han evolucionado muchísimo desde los primeros días del lenguaje. Ahora incorporan técnicas avanzadas que mejoran enormemente el rendimiento (como la compilación Just-In-Time).
Ejecución de JavaScript en otros entornos
Aunque el navegador web sigue siendo un entorno muy importante para la ejecución de JavaScript, con el tiempo han surgido otros runtimes que permiten ejecutar JavaScript fuera del navegador.
A esto le llamamos ejecutar JavaScript en el servidor. Pero el servidor puede ser cualquier cosa, tu ordenador personal. Lo que quiere decir es fuera del navegador.
Node.js
El primero y más famoso de estos runtime es Node.js, que fue introducido en 2009. Node.js permite ejecutar JavaScript en el servidor, utilizando el motor V8 de Google Chrome.
En su momento esto fue una revolución, porque permitía a los desarrolladores usar JavaScript tanto en el frontend como en el backend, y beneficiarse de su modelo de programación asíncrona y basada en eventos.
Otros runtimes
En años recientes, han surgido otros runtimes que buscan mejorar y ampliar las capacidades de Node.js.
Deno: Creado por Ryan Dahl, el mismo creador de Node.js, Deno fue lanzado en 2020 con el objetivo de corregir algunos errores de diseño de Node.js. Deno ofrece un entorno seguro por defecto, con permisos explícitos para acceso a archivos, red y otros recursos del sistema. Además, soporta TypeScript de forma nativa y tiene un sistema de módulos basado en URLs.
Bun: Es un runtime emergente diseñado para ser extremadamente rápido, enfocándose en la eficiencia y la simplicidad. Al igual que Deno y Node.js, Bun utiliza el motor JavaScript V8, pero introduce optimizaciones adicionales para mejorar el rendimiento de las aplicaciones JavaScript.
Esto son algunos de los más conocidos, pero existen muchos runtimes, incluso algunos muy ligeros para ejecutarse en el “edge”.
Otros entornos de ejecución
JavaScript se ha vuelto tan omnipresente que ahora se puede encontrar en una gran variedad de entornos, incluyendo:
Aplicaciones de escritorio
Utilizando frameworks como Electron, es posible construir aplicaciones de escritorio con tecnologías web (HTML, CSS, JavaScript).
Electron se basa en Node.js y Chromium, lo que permite a los desarrolladores crear aplicaciones multiplataforma.
Aplicaciones móviles
Frameworks como React Native permiten desarrollar aplicaciones móviles nativas usando JavaScript.
React Native traduce el código JavaScript a componentes nativos, ofreciendo una experiencia de usuario similar a la de las aplicaciones escritas en Swift o Kotlin.
Automatización
Herramientas como Puppeteer y Selenium utilizan JavaScript para automatizar tareas de navegación web y pruebas de aplicaciones, lo que es muy útil en el desarrollo y mantenimiento de software.
JavaScript en dispositivos de hardware
Pero JavaScript no se limita únicamente a entornos de software tradicionales. También podemos ejecutarlo en dispositivos de hardware como Arduino y ESP32 (que por esta web nos gustan mucho, ya lo sabéis ❤️)
Por ejemplo, Johnny-Five es un framework de JavaScript que permite programar sistemas embebidos utilizando JavaScript. (por ejemplo, podemos controlar dispositivos como LEDs, sensores, motores y otros componentes).
En definitiva, que podéis usar JavaScript en muchísimos lados. Ya no es un simple lenguaje de scripting para navegadores web.
Hoy en día, es un lenguaje de programación auténticamente de propósito general que se puede ejecutar en una amplia variedad de entornos, desde servidores hasta dispositivos de hardware y aplicaciones de escritorio y móviles.