Faisons-la immédiatement: Ce n'est pas une question sur la fuite de mémoire! J'ai une page qui permet à l'utilisateur de saisir certaines données et un JavaScript pour gérer ces données et produire un résultat. Le JavaScript produit des sorties incrémentielles sur un div, quelque chose comme ceci:
(function() { var newdiv = document.createElement("div"); newdiv.innerHTML = produceAnswer(); result.appendChild(newdiv); if (done) { return; } else { setTimeout(arguments.callee, 0); } })();
4 Réponses :
Je soupçonne que le problème - il essaie de réactiver instantanément. Essayez d'augmenter cela. P>
non ce n'est pas. Le délai d'heure 0 est une technique bien connue. Google autour si vous ne me croyez pas.
Une boucle utilisera moins de mémoire que la récursion.
var answerCount = 0; do { var newdiv = document.createElement("div"); newdiv.innerHTML = produceAnswer(); result.appendChild(newdiv); } while (!done && answerCount++ < 1000);
Vous avez complètement mal compris la question. Il n'y a pas de récursion !!! --------------------------
Passage des arguments.Callee à Settimeout invoque la fonction à nouveau, mais vous êtes correct, ce n'est pas strictement de récursivité car le Settimeout permet à la fonction d'appel de retourner (au moins elle devrait, mais peut-être que le retard = 0 est optimisé pour appeler immédiatement, dans lequel cas, ce serait une récursive). L'utilisation d'une boucle avec un compteur vous aidera toujours et le code sera plus facile à lire.
Même avec retard = 0, vous n'avez pas de récursivité.
JavaScript (dans le navigateur) est exécuté dans un bac à sable, ce qui signifie qu'il est clôturé d'accéder à des choses qui pourraient entraîner des problèmes de sécurité tels que des fichiers locaux, des ressources système, etc. - donc non, vous ne pouvez pas détecter l'utilisation de la mémoire. . p>
Comme l'état des autres réponses, vous pouvez faciliter la tâche du navigateur en mettant en pause entre des implémentations ou en utilisant moins de code à forte intensité de ressources, mais chaque navigateur a ses limites. p>
Merci pour votre réponse. Je soupçonnais que je ne pouvais pas détecter l'utilisation de la mémoire.
avoir une pièce de théâtre avec ceci ...
Malheureusement, la performance.Memorie est une matière chromée exclusive.
Avec tant de données, l'utilisateur ne peut-il même pas faire face?
Est-ce que cela fonctionne pour entourer le code avec essayer / attraper?
mémoire.performance.usedjsheapsize code> fonctionne simplement en chrome maintenant.
Je pense que vous voulez dire:
fenêtre.performance.memory.usedjsheapsize code>
Notez également que c'est uniquement chrome. Voir: docs.webplatform.org/wiki/apis/timing/properties/memory < / a>
... et ce fil suggère qu'il ne peut plus fonctionner correctement: groupes.google.com/forum / #! Sujet / Google-Chrome-Developer-Tool S / ...