浏览器中的javascript可以保存多少数据?
how much data can javascript in the browser hold?
我已经创建了一个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=84732位内存地址空间是上限,而对于64位,链接建议约1.9GB,尽管这很可能是您的操作系统可以支持和物理可用的上限。
总结一下:
- 32位将始终是一个上限,不是你的特定js变量,而是整个js VM,渲染器,页面内容等的上限
- 您的测试不太可靠,因为它正在计数的项目不相同
- 如果它们是相同的,你就会遇到字符串 的特殊情况处理。
我在Chrome上,我尝试了你的测试,它挂在你提到的相同的14850000上,即使我只有2gb的内存,我在linux安装中运行一个带有windows的虚拟机,我给了700Mb的内存,所以我猜是的Chrome有一个限制
在32位机器上,上限将始终是4GB,没有"但是"或"如果"。在实际操作中,不同的机器之间会有很大的不同(打开10多个选项卡并不罕见)
最好的办法是:只保留用户正在积极处理的数据,或者你不能从手边的服务器快速检索到的数据。- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 保存数组javascript
- 保存串行端口列表与流星
- 将JavaScript变量保存到Rails模型
- Java脚本将URL转换为已保存的URL时出错
- 如何自动保存动态生成的HTML SVG元素
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 将JQuery Handontable保存到服务器上的excel文件中
- NodeJS expressJS使用multer和passport将文件上传并保存到MongoDB
- 浏览器中的javascript可以保存多少数据?
- “可接受”的最低限度是多少?间隔循环中本地存储的延迟(用于“自动保存”)