2010-06-10 16 views
8

Ho avuto qualche problema con alcuni dei problemi a http://projecteuler.net/ con JavaScript. Ho usato una semplice pagina html e ho eseguito il mio codice nei tag script in modo da poter registrare i miei risultati nella console dei browser. Quando faccio esperimenti con i loop a volte causo il crash del browser.Come posso testare potenzialmente JavaScript "che blocca il browser"?

C'è un ambiente migliore per me per fare questo tipo di sviluppo?

+4

Volete una magica "crash il mio browser senza crash del mio browser" test? Quanto sarebbe bello? Se solo tutti avessero un tale test, allora forse i browser non si arresterebbero. –

+0

Pensa che il tuo primo passo potrebbe essere non scrivere infiniti loop! – griegs

risposta

5
  1. un browser che ha processi separati per ogni scheda
  2. breakpoints debugger
  3. un caso che rompe il ciclo se una soglia per il tempo viene colpito
0

Non c'è niente che puoi fare per mantenere la browser da crash diversi da bug di correzione che causano il crash del browser.

È possibile attenuare almeno l'impatto dello schianto utilizzando un browser come Chrome che generalmente segna gli arresti anomali in una scheda rispetto agli altri (in modo da perdere solo la propria pagina) o semplicemente installando un browser separato appositamente per il test.

In termini di tenere traccia dei dati che potrebbero essere andati al registro, è possibile utilizzare un plugin come Firebug che ha un debugger incorporato in modo da poter sospendere l'esecuzione dello script a parte ed esaminare le variabili, presumibilmente prima di qualsiasi incidente si verifica.

1

Se stai utilizzando programmi computazionalmente costosi nel tuo browser, potresti voler utilizzare web workers. In breve, ti permettono di eseguire codice in un thread diverso che non bloccherà il browser.

1

Se si è interessati solo all'esecuzione di programmi javascript in quanto tali, perché non si utilizza qualcosa come node.js o anche Rhino? In questo modo puoi facilmente registrare l'output senza perderlo se entra in "guai".

1

tutti i browser moderni (tranne Opera) dovrebbe interrompere il vostro script se si corre per più di 5- 10 secondi (Source).

In Firefox è possibile anche lower this threshold, se 10 secondi significa una punizione troppo grande. Si noti inoltre che questo meccanismo calci anche quando si esegue il codice dalla console di Firebug:

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

Credo che questa caratteristica da sola dovrebbe fornire un ambiente abbastanza sicuro per questi esperimenti loopy :)

+0

Quando ottengo lo screenshot in alto e premo "stop script", firefox può mostrare "non risponde" e si blocca.Per citarvi "Tutti i browser moderni (eccetto Opera) dovrebbero interrompere il tuo script" - "dovrebbe" è importante qui - Se loro ** lo facessero ** allora non ci sarebbe motivo per me di postare questa domanda. Forse questo è dovuto al mio ambiente (addons, os ecc.) O alle intracanze dei miei esperimenti (meno ovvio per il browser/console che per 'while (true)'). –

+0

@ yaya3: Sì, è per questo che ho usato "dovrebbe", come ho intuito che questo non sta accadendo per te. Per impostazione predefinita, il meccanismo dovrebbe dare il via ogni volta che lo script è in esecuzione per 10 secondi. Non è necessario avere un ciclo infinito. JavaScript all'interno dei browser non è mai stato concepito per l'elaborazione a lunga esecuzione, poiché viene eseguito nel singolo thread dell'interfaccia utente e blocca completamente gli aggiornamenti dell'interfaccia utente ... Si consiglia di controllare ['about: config'] (http: //kb.mozillazine. org/Dom.max_script_run_time) per vedere se questo è disabilitato nel tuo Firefox. Altrimenti potresti voler utilizzare un altro browser per gli esperimenti di Project Euler. –

+0

Ah, giusto, mi scuso, ho frainteso la tua risposta. È interessante osservare queste variabili del browser. Ho riscontrato che la riduzione di 'dom.max_script_run_time' ha velocizzato i miei test in FF - evviva. –

Problemi correlati