2010-06-12 21 views
9

Sé que ambos, es decir, y firefox tienen límites para la ejecución de javascript (Source 1, Source 2). En función del número de sentencias ejecutadas, escuché que eran 5 millones en algún lugar de IE y en función del número de segundos en Firefox: de manera predeterminada es 10 segundos para mi versión.Tiempo máximo de ejecución para JavaScript

Lo que no entiendo es qué casos se destinarán más de estos límites:

  1. Estoy seguro de que un bucle gigante pasará por encima del límite de tiempo de ejecución

  2. sino que una el operador del evento supera el límite, si el tiempo de ejecución está por debajo del límite, pero si ocurre varias veces?

Ejemplo:

Digamos que tengo un temporizador en mi página, que se ejecuta algo de JavaScript cada 20 segundos. El tiempo de ejecución para el controlador del temporizador es de 1 segundo. ¿Firefox y es decir, tratan cada llamada de la función del temporizador por separado, por lo que nunca supera el límite, o es que Firefox/es decir, suma el tiempo de cada llamada luego de que termine el controlador, así que después de 200 segundos en mi sitio (con el temporizador llamado 10 veces) se produce un error a pesar de que el manejador del temporizador tiene solo 1 segundo de duración.

Respuesta

1

El controlador de eventos se considera un nuevo contexto de ejecución: se restablece el límite de tiempo.

Si necesita hacer aún más cálculos, eche un vistazo a WebWorkers.

+0

ok gracias por la respuesta –

8

El siguiente artículo de Nicholas C. Zakas discute cómo y cuándo los diferentes navegadores interrumpen larga duración código JavaScript:

Rompiendo el código de procesamiento de largo en trozos pequeños y lanzarlos con temporizadores es de hecho uno forma de evitar este problema El siguiente post desbordamiento de pila sugiere un método para hacer frente a esto:

Por otro lado, web workers sería más adecuado para el procesamiento de larga ejecución, ya que su ejecución se produce en un proceso separado, y por lo tanto, no bloquea el hilo de interfaz de usuario:

Sin embargo los trabajadores web no son compatibles con Internet Explorer todavía, y que no tendría acceso al DOM.

0

Yo también atrapado en este tipo de error JS. También recibo la solución, desafortunadamente solo para IE, que dice editar el registro (comando regedit) y actualizar el número de comandos JS para permitir. Lea más aquí http://support.microsoft.com/?kbid=175500.

Pero esto no parece ser una buena solución para mí, porque si está desarrollando una aplicación web, no puede pedirle a cada usuario que use solo IE y actualice el registro de su sistema.

Como solución alternativa: si sus datos para procesar en el extremo del cliente son realmente grandes, entonces puede poner algunos retrasos manuales entre el procesamiento del conjunto de arreglos de eventos. Por ej. Si hay 100 eventos de cualquier tarea que desee procesar, puede dividirlos en 10 conjuntos de 100 y procesar cada uno de ellos en, por ejemplo, 100 ms. Para saber cómo hacer que siguen a continuación enlace:

http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

+0

El PO en realidad no pedir "solución" simplemente se preguntó lo que determina este comportamiento en cada navegador. –

Cuestiones relacionadas