Ho avuto lo stesso problema che stava accadendo quando l'utente aggiorna la pagina di successione. Il motivo era due cicli nidificati che si ripetevano più di 52000 volte. Questo problema era più duro in Firefox 24 rispetto a Chrome 29 dato che Firefox si arrestava prima (circa 2000 ms prima di Chrome). Quello che ho semplicemente fatto e che ha funzionato è stato che ho usato "for" loop invece di ciascuno e poi ho rifattorizzato il codice in modo da dividere l'intero loop array in 4 chiamate separate e quindi unire il risultato in uno. Questa soluzione ha dimostrato che ha funzionato.
Qualcosa di simile a questo:
var entittiesToLoop = ["..."]; // Mainly a big array
loopForSubset(0, firstInterval);
loopForSubset(firstInterval, secondInterval);
...
var loopForSubset = function (startIndex, endIndex) {
for (var i=startIndex; i < endIndex; i++) {
//Do your stuff as usual here
}
}
L'altra soluzione che ha funzionato anche per me era la stessa soluzione implementata con Worker APIs
da HTML5. Utilizza lo stesso concetto nei lavoratori in quanto evita che il browser venga bloccato perché viene eseguito sullo sfondo del thread principale. Se solo applicando questa API Workers non ha funzionato, posiziona ciascuna istanza di loopForSubset
in diversi worker e unisci il risultato all'interno del chiamante principale di Worker.
Voglio dire che questo potrebbe non essere perfetto ma questo ha funzionato. Posso aiutarti con blocchi di codice più reali, se qualcuno continua a pensare che questo li possa ospitare.
Ottenere un linguaggio più veloce! No, davvero: a meno che non sia assolutamente necessario, non usare JS per questo - come vedi, è 1) single-threaded e 2) slow. – Piskvor
Questa è una funzione lato client e JS è necessario. –
@Triptych - E le sue opzioni sono? Sicuramente si potrebbe sperare che un sollevamento molto pesante come questo possa essere eseguito lato server, ma dal momento che non conosciamo la sua situazione è meglio supporre che abbia una buona ragione per farlo lato client, e quando si lavora lato client in una web app , hai solo una scelta tra Javascript e, beh ... Javascript. – Toji