2010-06-10 15 views
8

He estado teniendo una grieta en algunos de los problemas en http://projecteuler.net/ con JavaScript. He estado usando una página html simple y ejecutando mi código en etiquetas de script para poder registrar mis resultados en la consola de los navegadores. Al experimentar con bucles, a veces hago que el navegador se cuelgue.¿Cómo puedo probar el JavaScript potencialmente "bloqueador del navegador"?

¿Hay un mejor entorno para hacer este tipo de desarrollo?

+4

¿Quieres una mágica la prueba "bloquear mi navegador sin bloquear mi navegador"? ¿Qué tan genial sería eso? Si solo todos tuvieran esa prueba, quizás los navegadores no se bloqueen. –

+0

¡Piensa que tu primer paso podría ser no escribir infinitos bucles! – griegs

Respuesta

5
  1. un navegador que tiene procesos separados para cada ficha
  2. puntos de ruptura depurador
  3. un caso que rompe el bucle si algún umbral para el tiempo es golpeado
0

No hay nada que puede hacer para mantener el el navegador se bloquea y no repara errores que hacen que el navegador se cuelgue.

Al menos puede mitigar el impacto del bloqueo utilizando un navegador como Chrome que generalmente segrega los bloqueos en una pestaña de los demás (por lo que solo pierde su propia página), o simplemente instalando un navegador específico específicamente para las pruebas.

En términos de mantener un registro de los datos que podrían haber ido al registro, puede usar un complemento como Firebug que tiene un depurador integrado para poder detener la ejecución del script y examinar sus variables, presumiblemente antes de cualquier se produce un bloqueo.

1

Si está ejecutando programas computacionalmente costosos en su navegador, es posible que desee consultar usando web workers. En resumen, le permiten ejecutar código en un hilo diferente que no bloqueará el navegador.

1

Si solo está interesado en ejecutar programas de Javascript como tales, ¿por qué no utiliza algo como node.js o incluso Rhino? De esta forma, puede registrar fácilmente la salida sin perderla si entra en "problemas".

1

Todos los navegadores modernos (excepto Opera) debe interrumpir la secuencia de comandos si se ejecuta durante más de 5- 10 segundos (Source).

En Firefox puede incluso lower this threshold, si 10 segundos significan un castigo demasiado grande. También tenga en cuenta que este mecanismo entra en acción, incluso cuando se ejecuta código de la consola de Firebug:

Stop Script on Firefox http://img819.imageshack.us/img819/9655/infloopsp.jpg

Creo que solo esta función debe proporcionar un ambiente bastante seguro para estos experimentos descabellado :)

+0

Cuando obtengo la captura de pantalla de arriba y presiono "detener script", Firefox puede mostrar como "no responde" y se congela.Para citarle "Todos los navegadores modernos (excepto Opera) deben interrumpir su secuencia de comandos" - "debería" es importante aquí - Si ** lo hicieron **, entonces no habría ninguna razón para que publique esta pregunta. Tal vez esto se deba a mi entorno (complementos, sistemas operativos, etc.) o a la intracavidad de mis experimentos (menos obvio para el navegador/consola que 'while (true)'). –

+0

@ yaya3: Sí, es por eso que utilicé "debería", ya que supuse que esto no estaba sucediendo para usted. De forma predeterminada, el mecanismo debería activarse siempre que el script se ejecute durante 10 segundos. No es necesario tener un ciclo infinito. JavaScript dentro de los navegadores nunca fue pensado para el procesamiento de larga ejecución, ya que se ejecuta en el único subproceso de UI y bloquea las actualizaciones de UI por completo ... Es posible que desee comprobar el ['about: config'] (http: //kb.mozillazine. org/Dom.max_script_run_time) para ver si esto está deshabilitado en su Firefox. De lo contrario, es posible que desee utilizar otro navegador para los experimentos de Project Euler. –

+0

Ah, sí, disculpas, no entendí tu respuesta. Es interesante ver estas variables del navegador. He encontrado que reducir el 'dom.max_script_run_time' ha acelerado mis pruebas en FF - porras. –

Cuestiones relacionadas