2012-03-30 12 views
10

En caso de que no sabe lo que estoy hablando, lea John Resig - How JavaScript Timers Work y Is JavaScript guaranteed to be single-threaded?¿Qué desencadena la ejecución del código JavaScript?

Hay varios factores desencadenantes que poner en cola las tareas en ejecución los motores JS FIFO. Esto no forma parte de ningún estándar, así que estoy tratando de encontrar una lista exhaustiva de esos factores desencadenantes. (Supongo que todo se reduce a los controladores de eventos internos, como eventos de carga guión o eventos del temporizador, pero prefiero ignorar partes internas del motor y mirar las cosas desde el punto de vista del usuario.)

Así

ahora he identificado

  • <script> elementos en el documento inicial (incluyendo los agregados por document.write) *
  • <script> elementos insertados por JS en tiempo de ejecución * handl
  • Evento ERS
    - estos incluyen una amplia variedad de casos, tales como la interacción del usuario, eventos de error, los mensajes de los Trabajadores web o devoluciones de llamada de Ajax ...
  • window.setTimeout
  • window.setInterval

*) sólo en Navegador/Entornos DOM

¿Algo más? ¿Alguna diferencia entre los motores JS?

+0

Similar a window.setTimeout y window.setInterval, ahora hay window.requestAnimationFrame que intentará activar la función la próxima vez que su pantalla se actualice (generalmente 1/60 de un segundo) – jcmiller11

+1

Puede agrupar 'setTimeout() 'y' setInterval() 'junto con los manejadores de eventos porque eso es lo que son: eventos temporizados. Básicamente, solo hay dos cosas: controladores de eventos y carga de scripts. – slebetman

Respuesta

1

"JavaScript" como un nombre de idioma no debería usarse, es demasiado amplio.

ECMAScript es a lo que se refiere. Puede encontrar información sobre ECMAScript en http://www.ecmascript.org/ El estándar de idioma se llama ECMA-262 con la Edición 5.1 compatible con la mayoría de los navegadores.

setTimeout, setInterval, eventos DOM y más no son parte del idioma. Estos son proporcionados por el entorno host como objetos host. Escribir ECMAScript para una amplia gama de entornos host debe tener especial cuidado cuando se utilizan objetos host.

El código de ECMAScript se ejecuta dentro de un contexto de ejecución. Esto toma la forma de una pila y mantendrá el estado del contexto de ejecución actual en la parte superior.

Hay 3 formas de impulsar un contexto de ejecución. Código global, eval y función. Esta es la única forma de iniciar el código. Los entornos host usarán estos métodos para ejecutar código.

El entorno de host puede suministrar una pila de llamadas. Esto se usa para apilar llamadas de función generadas por objetos de host que pueden ejecutarse en subprocesos independientes. Normalmente, un evento como setTimeout agregará una función a la pila de llamadas. El entorno de host esperará hasta que la pila de contexto de ejecución esté vacía, luego insertará la función de la pila de llamadas, creará un nuevo contexto de ejecución y ejecutará el código hasta que se complete. Se repetirá hasta que la pila de llamadas esté vacía.

Intentar crear una lista completa de gestores de contexto de ejecución de objetos host es inútil.

Para responder a las preguntas.

¿Algo más? Sí, hay muchas más.Esto está más allá del alcance de esta respuesta. Consulte el entorno de host particular que desea usar.

¿Alguna diferencia entre los motores JS? (Entornos host ECMAScript). Sí. De nuevo, esto va más allá del alcance de esta respuesta y depende del host.

Existen docenas de entornos de host, con nuevos creados todo el tiempo. Lo que desencadena la creación de un nuevo contexto de ejecución depende en gran medida del entorno de host.

Cuestiones relacionadas