浏览器中的javascript能容纳多少数据?

问题描述 投票:0回答:5

我创建了一个 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 内存 这是一个包含近 1500 万项的数组。我觉得还不错

你们也有同样的感受吗? 有人能告诉我如何为浏览器提供尽可能多的内存吗

谢谢

javascript html
5个回答
10
投票

再说一遍,我的机器有 16GB RAM。我可以看到浏览器 RAM 使用量随着它的增加而攀升,所以我认为它也受到 RAM 的限制。

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


5
投票

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

  • 14,850,000 * 300 = 4455000000 个字符

  • 14850000 * 300 * 2 = 8,910,000,000 字节

  • 8910000000 /1024 = 8,701,171.875 KB
  • (8910000000 /1024 ) / 1024 = 8,497.238159179688 MB
  • ((8910000000 /1024) / 1024) / 1024 = 8.298084139823914 GB

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

但是,当然这不是正在发生的事情。你只有 4GB 的 RAM,但根据数字,~4298MB 突然出现了,还有数组变量本身的结构以及 java VM 和 chrome 本身的结构等等

更不用说您单独推动 s+count 而不是 s,因此随着 count 中位数的增加,添加的字符串的长度也会增加。如果 s 相同,那么该值很可能会被 V8 引擎保留以节省内存。作为参考,由于计数变量以及长度的非线性增加而添加的附加字符数为 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、渲染器、页面内容等的上限
  • 您的测试不太可靠,因为它计算的项目不相同
  • 如果它们相同,你就会遇到字符串的特殊情况处理问题

编辑:


3
投票

我在 Chrome 上,我尝试了你的测试,它挂在你提到的同一个 14850000 上,即使我只有 2GB 的内存,并且我在我的 Linux 安装中运行一个带有 Windows 的虚拟机,我给了 700Mb 的内存,所以我猜是的 chrome有极限


0
投票

在 32 位机器上,您的上限始终为 4GB,没有“如果”或“但是”。实际上,机器之间的情况会有很大不同(打开 10 个以上选项卡并不罕见)

最好的方法:仅保留用户正在处理的数据或无法从服务器快速检索的任何数据。其他一切,当用户要求时获取。


0
投票

在 Chrome 和 Chromium OS 中,您可以通过按 F12、控制台使用开发人员工具命令行来检查限制:

> window.performance.memory.jsHeapSizeLimit
4294705152

内存限制是由浏览器定义的,参考这个答案

© www.soinside.com 2019 - 2024. All rights reserved.