2012-10-08 73 views

Respuesta

8

El modelo de ejecución del navegador se basa en el concepto de un "bucle de evento". Solo hay un evento de mantenimiento de hilo (ligera simplificación excesiva). Cuando ocurre un evento, los manejadores se llaman en secuencia.

Ajax es solo un mecanismo que causa ciertos eventos. La configuración de una solicitud HTTP es síncrona, pero simplemente está configurándola. El navegador responde a las comunicaciones de red que representan los datos de retorno del servidor activando eventos cuando eso sucede.

Los navegadores modernos son algo más complicados ya que cada ventana puede tener su propio proceso (o cualquier otra construcción de "hilo" de nivel de sistema, para ser general). Además, la nueva función de "trabajador web" permite que se ejecuten compartimentos separados en forma de subprocesos al mismo tiempo.

+0

+1, respuesta perfecta, clara y concisa. Solo una adición: en cierto modo, las implementaciones de JS con un solo subproceso son de hecho específicas del navegador. Pero hasta ahora, ninguna implementación de JS (que yo sepa) admite multi-threading como tal. En teoría, es posible, pero las desventajas son enormes: el hecho de que JS es utilizado por gente que no tiene una comprensión real de los conceptos básicos del desarrollo (multihilo), junto con el hecho de que muchos de los que escriben JS de hecho lo hacen_ el idioma. Honestamente, el levantamiento de Cthulu parecerá un día de campo en comparación con el surf en sitios de aficionados. Sin falta de respeto, aunque –

+0

La programación de aficionados es genial, todos comenzamos así, pero pensamos qué daño podríamos haberle hecho a nuestras propias máquinas si conseguimos herramientas serias desde el primer día. En la web, no es solo tu máquina la que estás destruyendo ... Básicamente, deja que JS sea lo que es: un lenguaje genial, que comienza fácil pero tiene construcciones muy ordenadas para aquellos que están dispuestos a buscarlos. Hay tanto que aprender que el enhebrado puede esperar, 'hasta que después de aprender sobre cierres, lambda's, delegación, alcances, etc. ... –

+2

@EliasVanOotegem ¡gracias! Bien, "Web Workers" puede implementarse de manera que su código se ejecute simultáneamente con el código de la página (y otros trabajadores), pero debido a que el modelo de comunicación entre subprocesos está estrictamente basado en mensajes (como casi lo hace Erlang) es relativamente seguro. – Pointy

Cuestiones relacionadas