¿El front-end JS era esencialmente sincrónico hasta el advenimiento de AJAX?

JavaScript desde el principio ha sido y sigue siendo de un solo subproceso y sincrónico , lo que significa que se ejecuta una línea de código a la vez en el orden en que aparece.

Además del motor de JavaScript, hay otros motores y piezas de código en ejecución que también ejecutan JavaScript, como el motor de representación o la solicitud HTTP . Cuando el motor de JavaScript habla con el motor de renderizado para hacer un cambio en la página web o solicitar algunos datos, entonces toda esa comunicación se ejecutará asincrónicamente dentro del navegador, sin embargo , lo que sucede dentro del motor de JavaScript sigue siendo sincrónico.

A medida que se llaman las funciones, se ejecutan apiladas una encima de la otra y cuando terminan, abandonan la pila. Eso se llama la pila de ejecución . Al lado de la Pila de Ejecución hay otra lista dentro del Motor de JavaScript llamada cola de eventos. La cola de eventos está llena de eventos y notificaciones de eventos que podrían estar sucediendo. Entonces, cuando el navegador tiene un evento que debe notificarse al motor de JavaScript ( por ejemplo, un evento de clic que debe activar una función ) , se coloca en la cola de eventos, pero la cola solo será procesado cuando la pila de ejecución está vacía, en otras palabras, hasta que JavaScript termina de ejecutar el resto del código línea por línea.

Entonces, lo que sucede es que el navegador asíncronamente pone cosas en la cola de eventos , pero el código aún se ejecuta línea por línea sincrónicamente dentro de JavaScript.

Dado lo dicho, JavaScript era un lenguaje que no se tomaba muy en serio antes de la era AJAX. Solíamos confiar mucho más en otras tecnologías como Flash, que tenía la capacidad de cargar datos XML, por ejemplo.

Incluso a fines de la década de 1990 hubo una gran cantidad de JavaScript escrito. La gente estaba escribiendo un montón de códigos de validación de formularios. Otros fusionarían JavaScript con ActiveX, Java o Flash para crear una salida agradable. Existían muchos sitios web en los que la manipulación DOM se usaba al máximo para generar páginas.

JavaScript puede ser una implementación síncrona, pero en comparación con el HTML de salida de solicitud / respuesta de un servidor web, fue un impulso a la interacción GUI. JavaScript se ejecuta lo suficientemente rápido en datos pequeños en el navegador que rara vez se nota su naturaleza síncrona. AJAX se convirtió en una forma de deshacerse de ver la carga de una página después de una solicitud. Eso puede ser lo suficientemente lento como para que se note un proceso sincrónico.

Los desarrolladores web corporativos que crean aplicaciones web internas a menudo preferían la solicitud / respuesta durante el tiempo llamado la guerra de los navegadores. Era más directo y menos susceptible a problemas relacionados con las diferencias del navegador. Pasó mucho tiempo antes de que surgiera la paridad del navegador. AJAX salió de ese mundo.

AJAX fue creado por Microsoft en comparación con una tecnología llamada RDS. Si bien tenía diferencias en el navegador, Microsoft ofreció una API y un navegador consistentes en los que los DEV corporativos podían confiar. Esa no era su intención (Outlook Web Access sí) pero era parte del paquete. Eso condujo a muchas soluciones web corporativas basadas en convenciones de Microsoft como DHTML y RDS, entre otras.

Otros vieron esto, replicaron la interfaz XmlHttpRequest en navegadores como Firefox y sembraron las semillas para la Web 2.0. Un día, la gente hablaba de Google Maps en el navegador. Una revista tecnológica en línea entró en detalles sobre AJAX, un nombre que aparentemente está más afiliado a Google, y cómo representa una nueva forma para las aplicaciones web. AJAX ya estaba en funcionamiento mucho antes de 2005, con muchas personas escribiendo código AJAX a mano, solo tomó un tiempo para que fuera más ampliamente aceptado ya que se hizo más accesible a través de marcos, kits de herramientas y bibliotecas.

Consejos y tutoriales de JavaScript y Ajax – Archivo: 2002 y anteriores

Mi propia impresión inicial de JS fue no. (pero escúchame sobre esto …)

Entiendo que es de un solo hilo y sincrónico.

Pero también lo fueron todos mis primeros juegos de computadora en casa. Y mis primeros sistemas embebidos. E incluso sistemas embebidos más recientes que eran de alto volumen y bajo costo.

El truco, por supuesto, es utilizar la programación basada en eventos.

Divide manualmente su código en cosas que escuchan eventos, como ‘hora de hacer esto ahora’ o ‘el usuario presionó ese botón’. Oyentes de eventos. Los vincula a fragmentos de código cortos llamados controladores de eventos.

Las tareas de ejecución larga se dividen en una serie de tareas de ejecución corta que usted programa en un temporizador.

Debido a mi experiencia, simplemente vine a JS y pensé: “Sé cómo hacer programación concurrente en tiempo real en eso”. No hay problema”.

Y una fortaleza (ahí: lo dije) de JavaScript es que, naturalmente, admite devoluciones de llamada, que se unen aún más naturalmente a los objetos como sus controladores. Es muy bueno en este tipo de programación.

Entonces, para mí, AJAX fue todo un poco “Meh. Visto. Comunicaciones de red con devoluciones de llamadas de eventos ”

No era.

Desde su inicio en Netscape Navigator v2, JavaScript se ha basado en el concepto de un bucle de eventos que maneja el orden en que las funciones se colocan en la pila. Así es como los eventos, posiblemente uno de los aspectos más importantes de JavaScript en primer lugar.

Por lo tanto, desde el principio, JavaScript ha sido de naturaleza asíncrona.

Javascript no es multiproceso en sí, y hasta donde yo sé, solo se ejecuta un proceso en la ventana de su navegador. Pero funciones como setTimeout siempre nos han permitido crear la ilusión de que sucedan múltiples cosas al mismo tiempo.

No tengo idea de cómo se implementa esto, pero supongo que probablemente simplemente insertando llamadas a funciones en algún tipo de bucle de eventos.

Entonces, en cuanto a AJAX, no creo que haya agregado nada fundamentalmente nuevo allí.

Las llamadas AJAX y setTimeout y setInterval y probablemente muchas otras cosas nos dan una aparente funcionalidad sincrónica. No recuerdo que estas cosas nunca hayan sido parte de Javascript, y comencé a trabajar con él tal vez solo un par de años después de que se inventó. Sin embargo, mi memoria es bastante mala.