2010-04-21 12 views
9

Viene visualizzato un messaggio di errore da "script non risponde" di Firefox. Questo errore è dovuto ad alcuni javascript che ho aggiunto alla mia pagina.Javascript: errore di script non risponde

Mi stavo chiedendo se la mancanza di responsabilità sia causata esclusivamente da loop di codice (le funzioni si richiamano ciclicamente o senza fine "per cicli") o potrebbero esserci altre cause?

Potrebbe aiutarmi a eseguire il debug di questo tipo di errori?

grazie

+0

Che cosa stai chiedendo esattamente? – SLaks

+1

Se il codice è in attesa di un callback AJAX e anche questo richiede molto tempo può essere un motivo. – Kasturi

+1

Ottieni Firebug e scopri come utilizzarlo. Quindi puoi eseguire il debug di errori come questi per te stesso. – Robusto

risposta

8

Secondo la Mozzila Knoledgebase:

quando il codice JavaScript viene eseguito per più di una quantità di tempo predefinito, Firefox visualizzerà una finestra di dialogo che dice Attenzione: Lo script non risponde. Questa volta è data dalle impostazioni dom.max_script_run_time e dom.max_chrome_script_run_time. Aumentando i valori di tali impostazioni, l'avviso verrà visualizzato meno spesso, ma vanificherà lo scopo: informarti di un problema con un'estensione o un sito Web in modo da poter interrompere lo script in fuga.

Inoltre:

Trovare la fonte del problema

per determinare quali script è in esecuzione troppo a lungo, fare clic sul pulsante Stop Script nella finestra di dialogo di avvertimento, poi andare in Strumenti | Console degli errori. Gli errori più recenti nella console degli errori dovrebbero identificare lo script che causa il problema.

Controllare la console di errore dovrebbe rendere abbastanza evidente quale parte del tuo javascript sta causando il problema. Da lì, rimuovi il pezzo di codice dannoso o cambialo in modo tale da non comportare un dispendio di risorse.

EDIT: Come accennato nei commenti all'autore del tema, Firebug è altamente raccomandato per problemi di debug con javascript. Jonathan Snook ha un video utile sull'utilizzo dei punti di interruzione per eseguire il debug di pezzi complessi di javascript.

9

Un modo per evitare questo è di avvolgere il vostro povero pezzo performante di codice con un timeout come questo:

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

Questa non è una soluzione a prova di proiettile, ma può risolvere il problema in alcuni casi.

+1

Normalmente l'attività pesante è in un ciclo for. Per una descrizione dettagliata di come convertire un ciclo for con un'attività pesante in una struttura che passa sistematicamente il controllo al browser, vedere qui: http://stackoverflow.com/questions/4460263/disabling-the-long- running-script-messaggio-in-internet-explorer/11619030 # 11619030 –

1
  1. ci potrebbe essere un ciclo infinito da qualche parte nel codice
    • inizio commentando i codici per individuare quale sezione sta causando
    • troppi cicli: potrebbe esserci una possibilità che il nome della variabile del contatore entri in conflitto, causando il ripristino della variabile, causando il ciclo infinito.
  2. provare quanto più possibile creare gli hash per gli oggetti tanto che leggere il tempo è O (1), in un caching modo tali dati
  3. evitano il ricorso ad js libs alcuni dei metodi potrebbero causare spese generali. per esempio. .htm() vs .innerHTML
  4. setTimeout() sì e no - dipende da come si chunkify tuoi codici
4

Abbiamo bisogno di seguire questa procedura per arrestare script in Firefox.

Passaggio 1 Avviare Mozilla Firefox.

Passaggio 2 Fare clic in un punto qualsiasi nella barra degli indirizzi nella parte superiore della finestra di Firefox per evidenziare l'intero campo.

Passaggio 3 Digitare "about: config" (omettere le virgolette qui e in tutto) e premere "Invio". A "Questo potrebbe invalidare la garanzia!" potrebbe apparire un messaggio di avviso; se lo fa, fai clic su "Sarò attento, lo prometto!" per aprire la pagina che contiene tutte le impostazioni di Firefox.

Passaggio 4 Fare clic una volta nella casella "Cerca" nella parte superiore della pagina e digitare "dom.max_script_run_time". L'impostazione è localizzata e visualizzata; ha un valore predefinito di 10.

Passaggio 5 Fare doppio clic sull'impostazione per aprire la finestra Immettere valore intero.

Passaggio 6 Digitare "0" e fare clic su "OK" per impostare il valore su zero. Gli script di Firefox ora vengono eseguiti indefinitamente e non generano errori di script. Passaggio 7

Riavviare Mozilla Firefox.

Problemi correlati