J'ai eu le même problème qui se passait lorsque l'utilisateur rafraîchi la page successivement. La raison était deux imbriqués pour des boucles qui se sont produites plus de 52000 fois. Ce problème était plus grave dans Firefox 24 que dans Chrome 29, car Firefox planterait plus tôt (environ 2000 ms plus tôt que Chrome). Ce que j'ai simplement fait et cela a fonctionné était que j'utilisais des boucles "for" au lieu de chacune et ensuite j'ai refactorisé le code de sorte que je divise le tableau entier en 4 appels séparés puis fusionné le résultat en un. Cette solution a prouvé qu'elle a fonctionné.
Quelque chose comme ceci:
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'autre solution qui a également travaillé pour moi était la même solution mise en œuvre avec Worker APIs
de HTML5. Utilisez le même concept chez les travailleurs car ils évitent que votre navigateur soit gelé car ils s'exécutent en arrière-plan de votre thread principal. Si cela ne fonctionnait pas avec l'API Workers, placez chaque instance de loopForSubset
dans différents opérateurs et fusionnez le résultat dans l'appelant principal de Worker. Je veux dire que cela pourrait ne pas être parfait, mais cela a fonctionné. Je peux aider avec plus de morceaux de code réel, si quelqu'un pense encore que cela pourrait les enchaîner.
Obtenez un langage plus rapide! Non, vraiment: à moins que ce ne soit absolument nécessaire, n'utilisez pas JS pour cela - comme vous le voyez, c'est 1) single-threaded et 2) slow. – Piskvor
Ceci est une fonction côté client, et JS est nécessaire. –
@Triptych - Et ses options sont? Certes, on pourrait espérer que beaucoup de travail de ce genre pourrait être effectué côté serveur, mais comme nous ne connaissons pas sa situation, il est préférable de supposer qu'il a de bonnes raisons de le faire côté client et de travailler côté client dans une application web , vous avez seulement vraiment le choix entre Javascript et, bien ... Javascript. – Toji