2010-04-21 20 views
9

Aparece un mensaje de error de Firefox "Script no responde". Este error se debe a algunos javascript que agregué a mi página.Javascript: Error de script no responde

Me preguntaba si la falta de respuesta se debe exclusivamente a los bucles de código (función que se llama cíclicamente o interminable "para bucles") o puede haber otras causas?

¿Podría ayudarme a depurar este tipo de errores?

gracias

+0

¿Qué estás preguntando exactamente? – SLaks

+1

Si su código está esperando una devolución de llamada AJAX y que tomar un largo tiempo también puede ser un motivo. – Kasturi

+1

Obtén Firebug y aprende a usarlo. Luego puede depurar errores como estos por su cuenta. – Robusto

Respuesta

8

De acuerdo con la Mozzila Knoledgebase:

Cuando el código JavaScript se ejecuta durante más de una cantidad de tiempo predefinido, Firefox mostrará un cuadro de diálogo que dice Advertencia: responde Guión. Esta vez viene dada por la configuración dom.max_script_run_time y dom.max_chrome_script_run_time. Al aumentar los valores de esas configuraciones, la advertencia aparecerá con menos frecuencia, pero se anulará el propósito: informarle de un problema con una extensión o sitio web para que pueda detener el guión fuera de control.

Además:

Encontrar el origen del problema

para determinar qué script se está ejecutando demasiado tiempo, haga clic en el botón de parada de script en el diálogo de advertencia, y luego ir a Herramientas | Consola de error. Los errores más recientes en la Consola de errores deberían identificar la secuencia de comandos que causa el problema.

La comprobación de la consola de errores debería hacer bastante obvio qué parte de su javascript está causando el problema. A partir de ahí, elimine la pieza ofensiva del código o cámbiela de forma que no requiera muchos recursos.

EDIT: Como se menciona en los comentarios al autor del tema, Firebug es muy recomendable para la depuración de problemas con javascript. Jonathan Snook tiene un video útil sobre el uso de puntos de interrupción para depurar piezas complejas de javascript.

9

Una forma de evitar esto es para envolver su mala pieza performant de código con un tiempo de espera de la siguiente manera:

setTimeout(function() { 
// <YOUR TIME CONSUMING OPERATION GOES HERE> 
}, 0); 

Esto no es una solución a prueba de balas, pero se puede resolver el problema en algunos casos.

+1

Normalmente, la tarea pesada está en un bucle for. Para una descripción paso a paso de cómo convertir un bucle for con una tarea pesada en una estructura que sistemáticamente pasa el control al navegador, consulte aquí: http://stackoverflow.com/questions/4460263/disabling-the-long- running-script-message-in-internet-explorer/11619030 # 11619030 –

1
  1. podría haber un bucle infinito en algún lugar del código
    • inicio comentando códigos para identificar qué sección está causando
    • demasiados bucles: existe la posibilidad de que el nombre de la variable del contador entre en conflicto, provocando que la variable siga reiniciándose, lo que causa el bucle infinito.
  2. tratar en lo posible la creación de hashes para sus objetos tanto es así que leer el tiempo es O (1) y en un almacenamiento en caché de manera que esos datos
  3. evitar el uso de js libs como algunos de los métodos podría causar gastos generales. p.ej. .htm() vs .innerHTML
  4. setTimeout() sí y no - depende de cómo se chunkify sus códigos
4

Tenemos que seguir estos pasos para detener la secuencia de comandos en Firefox.

Paso 1 Lanzamiento Mozilla Firefox.

Paso 2 Haga clic en cualquier parte de la barra de direcciones en la parte superior de la ventana de Firefox, para resaltar todo el campo.

Paso 3 Escriba "about: config" (omita las comillas aquí y en todo) y presione "Enter". A "¡Esto podría anular la garantía!" mensaje de advertencia puede aparecer; si lo hace, haz clic en "Tendré cuidado, lo prometo". para abrir la página que contiene todas las configuraciones de Firefox.

Paso 4 Haga clic una vez en el cuadro "Buscar" en la parte superior de la página y escriba "dom.max_script_run_time". La configuración se encuentra y se muestra; tiene un valor predeterminado de 10.

Paso 5 Haga doble clic en la configuración para abrir la ventana Introducir valor entero.

Paso 6 Tipo "0" y haga clic en "OK" para ajustar el valor a cero. Los scripts de Firefox ahora se ejecutan indefinidamente y no generarán errores de scripts. Paso 7

Reiniciar Mozilla Firefox.

Cuestiones relacionadas