9
votes

JavaScript pour trouver la mémoire disponible

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);
   }
})();


6 commentaires

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 fonctionne simplement en chrome maintenant.


Je pense que vous voulez dire: fenêtre.performance.memory.usedjsheapsize


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 / ...


4 Réponses :


0
votes

Je soupçonne que le problème - il essaie de réactiver instantanément. Essayez d'augmenter cela.


1 commentaires

non ce n'est pas. Le délai d'heure 0 est une technique bien connue. Google autour si vous ne me croyez pas.



1
votes

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);


3 commentaires

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é.



5
votes

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. .

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.


1 commentaires

Merci pour votre réponse. Je soupçonnais que je ne pouvais pas détecter l'utilisation de la mémoire.



3
votes

avoir une pièce de théâtre avec ceci ... xxx


1 commentaires

Malheureusement, la performance.Memorie est une matière chromée exclusive.