--
Stefano D.
> Explorer ha un po' troppa fretta: Ho uno script che viene eseguito forse
> in due secondi. Ma dopo un secondo IE chiede all'utente "Interrompere
> l'esecuzione dello script?" con quel che segue
dopo 2 secondi mi suona molto strano.
Comunque sia, dividilo in 2 parti e richiama la seconda parte con
setTimeout("secondaparte()",1);
> Buongiorno a tutti.
> Explorer ha un po' troppa fretta: Ho uno script che viene eseguito forse in
> due secondi. Ma dopo un secondo IE chiede all'utente "Interrompere
> l'esecuzione dello script?" con quel che segue.
Un secondo suona strano anche a me. Significa che per IE stai mettendo
in ginocchio la macchina, con quello script. Di che versione di IE, e
che versione di Windows, stiamo parlando?
hai dato un occhiata al task manager per vedere quanta CPU / Memoria
consumi durante l'esecuzione dello script?
In generale, comunque, quel messaggio non dovrebbe apparire. Se appare,
significa che il browser "e un ce la fa'". Quindi devi capire dove sta
il collo di bottiglia, nel tuo script, e riscriverlo in modo tale che
risulti più leggero.
--
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."
Un secondo, forse un secondo e mezzo.
Il problema non si verifica con macchine più recenti. Ma ora sto provando
cun una macchina vecchiotta (Pentium 4, 1,72 ghz, 1 GB RAM, XP SP3, IE8) e
con questa si verifica quasi sempre (solo con IE: tutto bene con Mozilla,
Chrome, Opera) .
La pagina è qui: http://www.csifaenza.it/comcalcio/tutte.html?perdata
Effettivamente per un attimo l'impiego di CPU arriva al picco. Ma il browser
ce la fa benissimo: basta cliccare su "no" e attendere un altro secondo, o
forse meno e la routine giunge a compimento. Insomma, l'unico problema è il
messaggio di errore.
Avevo pensato anche io di dividere lo script in due, ma la soluzione non mi
piace tanto, perchè si tratta di un unico ciclo FOR...
Grazie comunque.
> Un secondo, forse un secondo e mezzo.
> Il problema non si verifica con macchine più recenti. Ma ora sto provando
> cun una macchina vecchiotta (Pentium 4, 1,72 ghz, 1 GB RAM, XP SP3, IE8) e
> con questa si verifica quasi sempre (solo con IE: tutto bene con Mozilla,
> Chrome, Opera) .
IE è notoriamente più lento. Comunque puoi provare diversi approcci per
vedere se riesci a superare il problema. Uno, è evitare l'uso massiccio
di document.write. Magari buttando tutto in un array e poi fare un solo
document.write() ti può aiutare. Ovvero, invece di avere:
document.write("<div>");
document.write("Hello World");
document.write("</div>");
document.close();
Avrai:
var sb = [];
sb.push("<div>");
sb.push("Hello World");
sb.push("</div>");
document.write(sb.join(""));
document.close();
Considera che puoi anche avere:
sb.push("<div>", "Hello ", worldVariable, "</div>");
ad esempio.
Onestamente non so se può aiutare o meno, dovresti fare un profiling su
IE8 per vedere quali sono i colli di bottiglia, e ottimizzare quelli.
> Avevo pensato anche io di dividere lo script in due, ma la soluzione non mi
> piace tanto, perchè si tratta di un unico ciclo FOR..
Puoi sempre suddividere il ciclo for in due, uno che si smazza la prima
metà uno che si smazza la seconda metà dell'array, dando un po' di pausa
al browser in modo che tiri il fiato.