La historia de JavaScript es, en muchos sentidos, la historia del Internet moderno. Cualquiera que recuerde las páginas web estáticas, pesadas y de carga lenta de los primeros años de Internet, o incluso haya echado un vistazo a ellas a través de la Wayback Machine, tiene una idea de cuánto ha evolucionado el desarrollo web desde la década de 1990. Elementos interactivos como animaciones, formularios rellenables, e incluso la capacidad de desplazarse por artículos como este se deben en gran parte al surgimiento de JavaScript, un lenguaje de programación que inicialmente se desarrolló en 10 días y fue concebido como un “compañero” de Java.
Esta publicación hará un análisis profundo de cuánto ha avanzado JavaScript, guiando a los lectores a través de los conceptos básicos, orígenes, esfuerzos de estandarización y estado actual del lenguaje de programación más popular del mundo.
¿Qué es JavaScript?
JavaScript vs. HTML vs. CSS
JavaScript es un lenguaje de programación del lado del cliente que permite la creación de elementos interactivos en sitios web. Junto con HTML y CSS, JavaScript proporciona uno de los tres bloques fundamentales que se utilizan para crear sitios web modernos. Una publicación de blog de Hubspot ofrece la siguiente distinción simple para entender los tres conceptos:
- HTML proporciona la estructura básica de los sitios, que es mejorada y modificada por otras tecnologías como CSS y JavaScript.
- CSS se utiliza para controlar la presentación, el formato y el diseño.
- JavaScript se utiliza para controlar el comportamiento de diferentes elementos.
En otras palabras, HTML proporciona el marco para una página web, CSS agrega elementos de diseño, y JavaScript permite la interactividad.
¿Para qué se utiliza JavaScript?
El sitio web de codificación Skillcrush proporciona una excelente descripción de los usos de JavaScript. Señala que JavaScript es “utilizado para crear y controlar contenido dinámico de sitios web, es decir, cualquier cosa que se mueva, refresque o cambie en tu pantalla sin requerir que recargues manualmente una página web”. Entre otros elementos interactivos, esto incluye:
- Cuadros de confirmación.
- Llamadas a la acción deslizantes.
- Juegos basados en navegador.
- Animación y otros efectos especiales.
- Características de seguridad como contraseñas.
- Fuentes de noticias que se actualizan automáticamente.
- Desarrollo de aplicaciones móviles.
Orígenes de JavaScript
Prehistoria
JavaScript 1.0 fue lanzado en 1995, cuando Internet todavía era un invento bastante nuevo. El primer navegador web, Mosaic, había sido lanzado solo dos años antes, y HTML era la única herramienta para construir sitios web (en ese momento, CSS todavía era una propuesta y no sería lanzado oficialmente hasta 1996). Crear sitios web seguía siendo una habilidad relativamente fácil de adquirir, algo que era accesible no solo para ingenieros de software, sino también para desarrolladores y diseñadores sin experiencia.
Marc Andressen, el fundador del recién lanzado navegador Netscape, quería expandir las capacidades del navegador agregando elementos más dinámicos. Al mismo tiempo, quería que estos elementos estuvieran disponibles para el nuevo y creciente mercado de desarrolladores web aficionados. Así, nació la idea de crear un lenguaje de scripting simple y dinámico que un día sería conocido como JavaScript.
Creación en Netscape
Brendan Eich, el creador de JavaScript, fue contratado por Netscape para crear un lenguaje de scripting basado en navegador. Según JavaScript: The First Twenty Years, un artículo publicado por ACM coescrito por Eich, esta tarea se complicó por la asociación de Netscape con Sun Microsystems. Su estrategia conjunta era integrar el lenguaje de programación Java de Sun en Netscape 2.0 en un intento por superar a Internet Explorer de Microsoft. Como resultado, “la rápida estrategia dentro de Netscape para elegir un lenguaje de scripting obstaculizó severamente a Scheme, Perl, Python, Tcl y Visual Basic como no viables debido a intereses comerciales y/o consideraciones de tiempo para llegar al mercado. El único enfoque considerado viable… era diseñar e implementar un ‘pequeño lenguaje’ para complementar a Java”.
Como la versión beta de Netscape 2.0 estaba programada para lanzarse en septiembre de 1995, Eich tuvo que moverse rápidamente. El prototipo inicial, entonces denominado “Mocha”, fue creado en 10 días en mayo de 1995, con trabajo adicional durante el verano para eliminar errores, responder a solicitudes de funciones y diseñar API que permitirían a Mocha interactuar con Netscape. Estas API sentaron las bases para lo que eventualmente se conocería como el Document Object Model (DOM), una interfaz clave para interactuar con documentos HTML y XML.
Como señala Auth0 en una publicación de blog de 2017, el resultado final “parecía un Java dinámico, pero por debajo era una bestia muy diferente: un hijo prematuro de Scheme y Self” y fue presentado bajo el nuevo nombre JavaScript “como un lenguaje de scripting para pequeñas tareas del lado del cliente en el navegador, mientras que Java sería promovido como una herramienta más grande y profesional para desarrollar componentes web ricos”.
Lanzamiento inicial
La disponibilidad de JavaScript en la versión beta de Netscape 2.0 fue anunciada en un comunicado de prensa de diciembre de 1995, que describía a JavaScript como:
- Diseñado para crear aplicaciones centradas en la red.
- Complementario e integrado con Java.
- Complementario e integrado con HTML.
- Abierto y multiplataforma.
En la documentación inicial, Netscape describe las capacidades clave de JavaScript para “reconocer y responder a eventos del usuario como clics del mouse, entrada de formularios y navegación de páginas”. Esto permitía una amplia gama de casos de uso como:
- Solicitar el número de teléfono o código postal de un usuario.
- Alertar a los usuarios sobre entradas de formulario inválidas.
- Crear casillas de verificación.
- Agregar botones de “atrás” para navegar fácilmente por sitios web.
- Preservar el estado entre páginas web para rastrear acciones del usuario.
- Reproducir animaciones, textos en desplazamiento o archivos de audio.
ActiveX y NetscapeONE: Hacia el desarrollo de aplicaciones
JScript y ActiveX
A medida que crecía el interés en JavaScript, navegadores competidores como Internet Explorer estaban bajo presión para habilitar capacidades de scripting similares. Aunque “Java” estaba bajo marca registrada por Sun, JavaScript era abierto y con licencia libre, lo que permitió a Microsoft aplicar ingeniería inversa para su propia implementación, JScript, que fue lanzada con Internet Explorer 3.0 en agosto de 1996.
Además, JScript podía integrarse con el ecosistema más amplio de Microsoft como parte de un conjunto de tecnologías conocidas como ActiveX. Como se indicó en un comunicado de prensa de 1996, ActiveX estaba destinado a “formar un marco robusto para crear contenido interactivo utilizando componentes de software, scripts y aplicaciones existentes” y permitía a los usuarios “integrar aplicaciones en navegadores web para que los datos gestionados por esas aplicaciones fueran accesibles como páginas web”. También permitía la creación de aplicaciones interactivas del lado del servidor mediante el soporte para JScript, así como VBScript, un lenguaje de scripting derivado de Visual Basic de Microsoft.
NetscapeONE y JavaScript 1.1
Además de la popularidad de JavaScript, un gran impulso para el lanzamiento de ActiveX por parte de Microsoft fue un proyecto similar en Netscape diseñado para expandir HTML más allá del navegador y hacia el ámbito del desarrollo de aplicaciones web. Este proyecto, conocido como NetscapeONE, permitía que las páginas web no solo presentaran información, sino que también sirvieran como contenedores para aplicaciones empresariales.
NetscapeONE, así como Netscape 3.0, también incluían la versión 1.1 de JavaScript, que permitía la creación de bibliotecas JavaScript como páginas separadas en lugar de insertar código JavaScript en archivos HTML.
Sin embargo, las diferencias entre la implementación de JavaScript de Microsoft y JavaScript 1.1 de Netscape resultaron en incompatibilidades que causaban fallos en el código interactivo dependiendo del tipo de navegador o, a veces, incluso de la versión del navegador. Para realmente habilitar el soporte multiplataforma, se necesitaba estandarización.
Estandarización y expansión
Al crear especificaciones sobre cómo deben implementarse las herramientas tecnológicas, los organismos de estándares permiten la interoperabilidad entre plataformas y dispositivos. Netscape anunció sus planes para estandarizar JavaScript a través del organismo internacional de estándares ECMA en un comunicado de prensa de 1996. Como ECMA no podía usar el nombre registrado “Java”, el lenguaje fue estandarizado bajo el nombre ECMAScript. La introducción de ECMAScript permitió una mayor interoperabilidad entre navegadores, pero nuevos desarrollos en la historia de Internet estaban impulsando la demanda de expansiones aún más ambiciosas.
Uno de estos desarrollos fue la aparición de AJAX, una técnica de desarrollo que utiliza varias tecnologías, incluido JavaScript, para permitir la programación asíncrona. Con ella, las páginas web podían cambiar dinámicamente el contenido sin recargar toda la página y, como resultado, sin interrumpir la experiencia del usuario. Aunque la publicación de blog inicial de 2005 que proponía AJAX principalmente lo presentaba como una forma de mejorar la experiencia del usuario al reducir el tiempo que los usuarios están “esperando a que el servidor haga algo”, sus ramificaciones incluyen muchas características ampliamente utilizadas en la web hoy en día. Esto incluye sugerencias de búsqueda que cambian a medida que las escribes en Google, barras de estado, notificaciones, fuentes de noticias y otros elementos que se actualizan automáticamente.
Node.js y JavaScript del lado del servidor
A lo largo de la década de 2000, la introducción y el rápido crecimiento de Internet inalámbrico, dispositivos móviles conectados a Internet, computación en la nube y redes sociales estaban llevando el uso de Internet a nuevas alturas, requiriendo cada vez más capacidad para atender ese tráfico. En 2009, la frustración con la incapacidad de los servidores HTTP Apache para manejar solicitudes concurrentes en decenas y cientos de miles inspiró la creación de Node.js.
Node.js es un entorno de ejecución que saca JavaScript del navegador, permitiendo que JavaScript se ejecute en cualquier lugar donde Node.js esté instalado, utilizando el motor V8 de Google para compilar código JavaScript a código máquina. Como se señala en JavaScript in Plain English, “esto cambió el lenguaje JavaScript para siempre y ayudó a convertirlo lentamente en más un lenguaje de programación y menos un lenguaje de scripting”, permitiendo a los desarrolladores frontend escribir código del lado del servidor sin aprender un nuevo lenguaje. Además, Node.js aumenta la capacidad del servidor al usar un bucle de eventos y E/S asíncrona para manejar muchas solicitudes concurrentes al mismo tiempo.
JavaScript hoy
Hoy, JavaScript es constantemente calificado como el lenguaje de programación más utilizado por los desarrolladores web, según GitHub. A partir de este año, las encuestas de W3Tech señalan que JavaScript es utilizado para programación del lado del cliente por el 97.1 % de todos los sitios web, incluidos algunos de los sitios web más populares del mundo como Google, YouTube, Facebook y Amazon.
Los últimos años han traído algunos de los desarrollos más emocionantes en JavaScript hasta la fecha, incluida la introducción de:
- Async y await, una característica de JavaScript que simplifica la programación de código asíncrono.
- Webassembly, un lenguaje complementario a JavaScript que permite que el código escrito en diferentes lenguajes se ejecute a una velocidad casi nativa.
- Typescript, una variante de JavaScript que verifica errores en un programa antes de la ejecución.
Aunque JavaScript fue diseñado rápidamente y destinado a pequeñas tareas de diseño frontend, ahora es un ecosistema rico y maduro que ha transformado el Internet moderno con sitios dinámicos y aplicaciones web.
Edge Functions con soporte JavaScript
En Azion, uno de nuestros objetivos clave es hacer que la programación sea lo más simple y flexible posible. Es por eso que JavaScript, un lenguaje con soporte ubicuo y creado pensando en la facilidad de uso, es una gran opción para Edge Functions, un nuevo producto que lleva la computación serverless al edge de la red.
Nuestra implementación de JavaScript utiliza el estándar ECMA, incluido el soporte para promesas con async/await y planes para soportar WebAssembly pronto. Con Edge Functions, los desarrolladores pueden crear y ejecutar funciones basadas en eventos en el edge de la red, utilizando la API de JavaScript Runtime. Las Edge Functions se ejecutan en milisegundos en el nodo edge más cercano a su usuario final y escalan automáticamente, eliminando la necesidad de aprovisionar o gestionar recursos. Como resultado, el costo y el uso de recursos se reducen drásticamente, y los desarrolladores pueden dedicar más tiempo a enfocarse en el frontend de su aplicación, asegurando la mejor funcionalidad y experiencia de usuario posible.
Para leer más sobre Edge Functions, visita la página del producto o crea una cuenta gratis para comenzar a programar funciones basadas en eventos en JavaScript hoy.