9

让我们立即明确:这不是关于内存泄漏的问题!我有一个页面,允许用户输入一些数据和一个 JavaScript 来处理这些数据并产生结果。JavaScript 在 DIV 上生成增量输出,如下所示:

(function()
{
   var newdiv = document.createElement("div");
   newdiv.innerHTML = produceAnswer();
   result.appendChild(newdiv);
   if (done) {
      return;
   } else {
      setTimeout(arguments.callee, 0);
   }
})();

在某些情况下,计算会产生如此多的数据,以至于 IE8 将失败并显示以下消息:

处理太多数据时没有足够的存储空间

问题是:有没有办法计算出多少数据是太多数据?

正如我所说,没有要解决的错误。这是真正的内存不足,因为计算需要创建太多的 html 元素。

如果浏览器成功,我的想法是在执行计算之前运行一个函数以提前解决。但是要这样做,以一种通用的方式,我认为我需要找到浏览器可用的内存。

欢迎任何建议。

4

4 回答 4

5

Javascript(在浏览器中)在沙箱中运行,这意味着它无法访问可能导致安全问题的事物,例如本地文件、系统资源等 - 所以不,您无法检测内存使用情况。

正如其他答案所述,您可以通过在实现之间暂停或使用资源较少的代码来使浏览器的任务更容易,但每个浏览器都有其局限性。

于 2010-01-08T13:25:12.777 回答
3

玩这个...

document.write(performance.memory.jsHeapSizeLimit+'<br><br>');
document.write(performance.memory.usedJSHeapSize+'<br><br>');
document.write(performance.memory.totalJSHeapSize);
于 2015-03-31T09:16:57.853 回答
1

循环将比递归使用更少的内存。

   do
   {
     var newdiv = document.createElement("div");
     newdiv.innerHTML = produceAnswer();
     result.appendChild(newdiv);
   } while (!done);

您还可以对产生的答案数量设置一些上限。

   var answerCount = 0;
   do
   {
     var newdiv = document.createElement("div");
     newdiv.innerHTML = produceAnswer();
     result.appendChild(newdiv);
   } while (!done && answerCount++ < 1000);
于 2010-01-08T13:20:56.107 回答
0

我怀疑有 0 超时延迟是问题所在 - 它正在尝试立即重新运行。尝试增加这个。

于 2010-01-08T12:57:57.743 回答