2011-04-18 10 views
7

Desde javascript estoy llamando a un método web. Con IE, si paso un parámetro enorme a ese método web, aparece una alerta "Deje de ejecutar este sciprt? Un script en esta página hace que Internet Explorer se ejecute lentamente" aparece.¿Cómo manejar la alerta "una secuencia de comandos en esta página hace que Internet Explorer se ejecute lentamente"?

Es posible manejar el clic en el botón "Sí", de modo que si el usuario decide cancelar la ejecución del script puedo ejecutar algún script alternativo (en este caso, mi script "alternativo" consiste en cerrar algún progreso bar I popup justo antes de ejecutar el script de larga duración).

He visto muchas publicaciones que explican cómo evitar que se muestre esta alerta, pero no quiero que se detenga la alerta: solo quiero poder manejar el caso en el que el usuario decide detenerlo la ejecución del script

+1

Puede tener una función separada que verifique periódicamente si el trabajo continúa o no – JohnP

+0

En JS estándar no se podía; el trabajo se realiza de forma síncrona de un solo subproceso, de modo que la función separada no se ejecutaría hasta después de que se haya completado la primera, lo que sería demasiado tarde. –

Respuesta

4

He tratado esto anteriormente en una aplicación interna donde no les importaba cuánto tiempo le llevó al navegador hacer crujir los números, simplemente no querían tener que hacer clic en el indicador.

La clave consiste en dividir el trabajo en partes relativamente predecibles de trabajo (predecible en términos de tiempo de CPU) y ejecutarlos en un setInterval como:

function doWork(begin, end) { 
    // Some chunk of what your worker function normally does from begin to end 

    if (actualEnd < end) // Nothing left to do 
     clearInterval(Interval); 
} 

var Interval = setInterval(doWork, 15); 

Esto evita que el símbolo es decir, desde que aparece (o Chrome presentará el cuadro de diálogo "Congelar"). El siguiente paso es agregar un código que permita al usuario omitirlo por completo; si la cantidad de trabajo se conoce desde el principio, pregúnteles de inmediato. De lo contrario, comience a procesar y, después de n fragmentos, pregúnteles si desean realizar la función más económica.

Hay otras 2 opciones para obtener esta cantidad de trabajo realizado:

  1. Mire hacia adelante en cuanto a la cantidad de trabajo que hay que hacer, y si es mucho, la envíe al servidor (Esto, desafortunadamente, los medios escribiendo su JS nuevamente en el servidor; por supuesto, podría usar un motor de servidor que ejecute Javascript para ahorrarse algo de codificación).
  2. trabajadores el uso de fondo de Google Gears/HTML5

Por último, si usted está haciendo esto mucho trabajo en la demanda, es probable que haya oportunidades de aceleración en el trabajo que se está realizando - los datos podrían ser indexadas de antemano en el servidor para hacer los cálculos más rápido/más simple, cosas así. Pero no sé lo que estás calculando.

Cuestiones relacionadas