tablas - ¿Cómo maneja JavaScript las respuestas AJAX en segundo plano?
obtener datos de una tabla html javascript (2)
Debajo de las carátulas, javascript tiene una cola de eventos. Cada vez que finaliza un hilo de ejecución de JavaScript, comprueba si hay otro evento en la cola para procesar. Si lo hay, lo saca de la cola y desencadena ese evento (como un clic del mouse, por ejemplo).
La red de código nativo que se encuentra bajo la llamada ajax sabrá cuándo se realiza la respuesta de ajax y se agregará un evento a la cola de eventos de JavaScript. La forma en que el código nativo sabe cuándo se realiza la llamada ajax depende de la implementación. Se puede implementar con hilos o también puede ser un evento controlado (en realidad no importa). El objetivo de la implementación es que cuando se realiza la respuesta ajax, algún código nativo sabrá que está hecho y colocará un evento en la cola JS.
Si no se está ejecutando Javascript en ese momento, el evento se activará inmediatamente y se ejecutará el controlador de respuesta ajax. Si algo se está ejecutando en ese momento, el evento se procesará cuando finalice el hilo de ejecución de JavaScript actual. No es necesario que haya ninguna encuesta por parte del motor de JavaScript. Cuando una parte de Javascript termina de ejecutarse, el motor JS simplemente comprueba la cola de eventos para ver si hay algo más que deba ejecutarse. Si es así, saca el próximo evento de la cola y lo ejecuta (llamando a una o más funciones de devolución de llamada que están registradas para ese evento). Si no hay nada en la cola de eventos, entonces el intérprete de JS tiene tiempo libre (recolección de basura o inactividad) hasta que algún agente externo ponga algo más en la cola de eventos y lo despierte nuevamente.
Debido a que todos los eventos externos pasan por la cola de eventos y ningún evento se desencadena mientras javascript está ejecutando otra cosa, permanece en un solo subproceso.
Aquí hay algunos artículos sobre los detalles:
- Cómo funcionan los temporizadores de JavaScript - escrito por John Resig
- Eventos y tiempo en profundidad
- Especificación W3: bucles de eventos HTML5
- Artículo de MDN sobre Event Loop
- Presentación en cola de eventos JS
- El bucle de eventos de JavaScript: explicado
- Cinco patrones para ayudar a dominar el Javascript asíncrono
- Presentación de Javascript Event Loop
- Video sobre cómo funciona JavaScript (incluido el ciclo de eventos a las 10:27)
Dado que JavaScript se ejecuta en un único hilo, después de que se realiza una solicitud AJAX, ¿qué sucede realmente en el fondo? Me gustaría obtener una visión más profunda de esto, ¿alguien puede arrojar algo de luz?
Puede encontrar here una documentación muy completa sobre el manejo de eventos en javascript.
Está escrito por un chico que trabaja en la implementación de javascript en el Opera Browser.
Más precisamente, mira los títulos: "Flujo de eventos", "Hacer cola de eventos" y "Eventos no usuarios": aprenderás que:
- Javascript se ejecuta en un solo hilo para cada pestaña o ventana del navegador.
- Los eventos se ponen en cola y se ejecutan secuencialmente.
- XMLHttpRequest es ejecutado por la implementación y las devoluciones de llamada se ejecutan utilizando la cola de eventos.
Nota: El enlace original era: link , pero ahora está muerto.