浏览器中的javascript可以保存多少数据?

how much data can javascript in the browser hold?

本文关键字:保存 多少 数据 javascript 浏览器      更新时间:2023-09-26

我已经创建了一个JSFiddle来查看我可以将多少数据推送到浏览器中。

链接为http://jsfiddle.net/GWxAk/

代码很简单。它只是试图将尽可能多的字符串压入数组。字符串的长度大约为300-310个字符。

我的问题是:结果是否取决于我的电脑有多少内存?浏览器之间真的有区别吗?

例如,如果我有8gb的内存,我会得到更多,如果我有4gb ?

var s = '';
for (var i = 0; i < 300; i++) {
    s += 'a';
}
array = [];
count = 0;
function doMore() {
    for (var i = 0; i < 1000; i++) {
        count++;
        array.push(s + count);
    }
};
function repeat() {
    doMore();
    document.body.innerHTML = 'size:' + array.length;
    setTimeout(repeat, 100);
}
repeat();

在我的情况下,chrome挂在14850000,我有4gb的ram这是一个包含近1500万件物品的数组。我想还不错吧

你们也一样吗?谁能告诉我如何给浏览器提供尽可能多的内存?

谢谢

同样,我的机器有16GB内存。我可以看到浏览器的内存使用量随着它的增加而上升,所以我认为它也受到了内存的限制。

IE crapped out at 16,840,000
Chrome at 14,850,000
Firefox 32,890,000
Safari recycles itself around 8,720,000 (LOL @ Apple)

这是内存使用和firefox的截图http://screencast.com/t/3Xl31yGgHWC

让我们假设UTF8,这意味着你的'a'是2字节/8位。

  • 14850,000 * 300 = 4455000000字符

  • 14850000 * 300 * 2 = 8,910,000,000 bytes

  • 8910000000/1024 = 8701171.875 kb
  • (8910000000/1024)/1024 = 8497.238159179688 mb
  • ((8910000000/1024)/1024)/1024 = 8.298084139823914 gb

因此,我们可以从您的测试中推测,在chrome JS引擎中字符串的最大长度为4,455,000,000个字符,或约8.3 GB的内存。

但这当然不是发生的事情。你只有4GB的内存,但~4298MB已经出现了根据数字,有数组变量本身的结构和java VM和chrome本身的帐户等等

更不用说你push的是s+count而不是s本身,所以被添加的字符串的长度随着count中位数的增加而增加。如果s是相同的,那么很可能这个值会被V8引擎截取以节省内存。作为参考,由于count变量以及由于其长度的非线性增加而添加的额外字符数为9,7438,889个字符或185.85MB的数据。

所以这里一定发生了别的事情。

对于V8 JS引擎的限制:

http://code.google.com/p/v8/issues/detail?id=847

32位内存地址空间是上限,而对于64位,链接建议约1.9GB,尽管这很可能是您的操作系统可以支持和物理可用的上限。

总结一下:

  • 32位将始终是一个上限,不是你的特定js变量,而是整个js VM,渲染器,页面内容等的上限
  • 您的测试不太可靠,因为它正在计数的项目不相同
  • 如果它们是相同的,你就会遇到字符串
  • 的特殊情况处理。
编辑:

我在Chrome上,我尝试了你的测试,它挂在你提到的相同的14850000上,即使我只有2gb的内存,我在linux安装中运行一个带有windows的虚拟机,我给了700Mb的内存,所以我猜是的Chrome有一个限制

在32位机器上,上限将始终是4GB,没有"但是"或"如果"。在实际操作中,不同的机器之间会有很大的不同(打开10多个选项卡并不罕见)

最好的办法是:只保留用户正在积极处理的数据,或者你不能从手边的服务器快速检索到的数据。