javascript找到可用的内存

时间:2010-01-08 12:55:07

标签: javascript memory cross-browser large-data-volumes

让我们立即明确:这不是关于内存泄漏的问题! 我有一个页面,允许用户输入一些数据和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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

玩这个......

document.write(performance.memory.jsHeapSizeLimit+'<br><br>');
document.write(performance.memory.usedJSHeapSize+'<br><br>');
document.write(performance.memory.totalJSHeapSize);

答案 2 :(得分: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);

答案 3 :(得分:0)

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