Domanda uno script in questa pagina sta causando cioè l'esecuzione lentamente


Il problema è nel titolo: IE ha un comportamento scorretto e sta dicendo che c'è uno script in esecuzione lentamente - FF e Chrome non hanno questo problema.

Come posso trovare il problema. . C'è molto JS in quella pagina. Il controllo a mano non è una buona idea

MODIFICARE : È una pagina di un progetto a cui sto lavorando ... ma ho bisogno di uno strumento per trovare il problema.

Fine : Si è rivelato essere UpdatePanel: in qualche modo si sarebbe "confuso" e ci sarebbe voluto troppo tempo per elaborare qualcosa. L'ho appena buttato fuori dalla finestra - userà solo JQuery d'ora in poi: D.

E sto selezionando la risposta di Remy Sharp perché non sapevo davvero dello strumento e mi sembra abbastanza interessante.


31
2017-10-17 15:05


origine


risposte:


Prendi una copia di IBM Page Profiler:

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=61d74777-1701-4014-bfc0-96067ed50156

È gratuito (sempre una vittoria). Avvia in background, dagli qualche secondo, poi aggiorna la pagina in IE. Torna al profiler ed elencherà tutte le risorse utilizzate nella pagina e fornirà informazioni dettagliate sul profilo, in particolare dove JavaScript richiede molto tempo per essere eseguito.

Dovrebbe essere un buon inizio per trovare la fonte del tuo problema.

Se i tag di script sono in linea, suggerirei di creare una copia locale del file e separare i tag dello script in file separati, se possibile.


18
2017-10-18 00:18



Gli script di lunga durata vengono rilevati in modo diverso dai diversi browser:

  • IE solleverà l'avviso dopo che sono state eseguite 5 milioni di dichiarazioni (maggiori informazioni su MSDN)
  • Firefox avviserà se lo script impiega più di 10 secondi (maggiori informazioni su MDN)
  • Safari ti avviserà se lo script impiega più di 5 secondi
  • Chrome (1.0) non ha limiti impostati e continuerà semplicemente a provare fino a un'eccezione OutOfMemory a cui punto si blocca
  • Opera continuerà a girare per sempre, senza preavviso.

Nicholas Zakas ha scritto un eccellente articolo su questo argomento.

In quanto tale, il modo migliore per evitare questi problemi è ridurre il looping, la ricorsione e la manipolazione del DOM.


52
2018-02-27 00:34



Rimuovi metà del codice e vedi se succede ancora. Se no, è nella metà che hai rimosso. Ripeti fino a quando non capisci quale blocco di codice sta causando il problema.


9
2017-10-17 15:14



Di solito è un ciclo infinito che causa questo. Controlla i tuoi loop e le loro condizioni di uscita.


3
2017-10-17 15:16



Per IE, la finestra di dialogo è basata sul numero di comandi JS elaborati. Vedi qui per informazioni e metodo per modificare il valore predefinito: http://support.microsoft.com/kb/175500


1
2018-02-27 00:19



Io solo bloggato su questo e metto quello che penso sia una soluzione piuttosto elegante. Quindi dai un'occhiata. Come accennato in precedenza, la mia soluzione interrompe le operazioni a lungo termine in blocchi ma fornisco una buona classe di utilità per farlo.

Grazie

Guido


1
2018-03-04 01:55



puoi anche verificare se nella pagina è incluso un google analytics javascript. Il bug si è verificato solo con IE e una volta rimosso il codice google, ha funzionato!


1
2018-06-03 14:54



Assicurati che sotto il codice JavaScript venga eseguito una sola volta:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(win_onload);

Sopra il codice è all'interno della funzione win_onload().


1
2018-02-28 03:18