JavaScript memory limit
JavaScript应用程序可以存储的最大数据量是多少?
我猜这是由浏览器处理的,每个浏览器都有其局限性吗?
如果没有限制,将创建页面文件吗? 如果是这样,那不安全吗?
相关讨论
- 有一些限制,尽管这些取决于浏览器。 例如,Firefox对堆栈空间以及过多的CPU消耗有限制。
AFAIK,没有上限,您的脚本基本上可以使用内存,直到系统用尽内存(包括交换)。没有上限并不意味着您必须全部吃掉,用户可能不喜欢它。
在Chrome和Chromium操作系统中,内存限制是由浏览器定义的,您可以在开发人员工具的命令行中按以下命令通过按F12键来检查内存限制:
1 2 |
> window.performance.memory.jsHeapSizeLimit 1090519040 |
在我的Windows 10操作系统上,它约为1 GB。
在Chrom(e / ium)上,您可以通过分配本机数组来避免堆大小限制:
1 2 3 4 |
var target = [] while (true) { target.push(new Uint8Array(1024 * 1024)); // 1Meg native arrays } |
这会使选项卡崩溃,速度约为2GB。之后,Chrom(e / ium)陷入困境,并且不重新启动浏览器就无法重复测试。
我还建议您在深入了解杂草以尝试诊断或测量浏览器中与之相关的任何内存之前,先阅读TrackJS的有关监视JavaScript内存的博客文章。
您也可以在comp.lang.javascript中搜索javascript内存限制。
另请参阅以下堆栈溢出帖子:
-
Javascript中数组的最大大小,建议您最多可以存储232-1 = 4,294,967,295 = 42.9亿个元素。
-
JavaScript函数可以接受的最大参数数量
JS9天文图像显示库网站上还有其他知识:处理内存限制。
(我试图找到一个好的答案,而这里提供的"没有上限"答案对我来说太愚蠢了。我不能为数百万美元的项目遇到生产问题,不能对管理层说:"嗯,我假设没有上限,一切都会好起来的。"尝试进行概念验证,例如,在您选择的JavaScript UI框架中加载大量组合框控件,等等。您可能会发现框架性能有所下降。 )
我发现以下一些组件可以很好地扩展CPU性能和内存性能:
- 微软摩纳哥编辑器
- 几个商业项目使用此方法:
- 邮递员,从v7.1.1-canary08开始
- VS代码
- 几个商业项目使用此方法:
以下是一些众所周知的性能下降的框架示例:
- 角度:变化检测方法差。
- 对于每个异步事件,将每个绑定(Model-Dom绑定)与其旧值进行比较,以决定是否重新渲染。
- NG1:> 2500个观看者,性能停止
- NG2:仍然存在相同的问题,但是您有一个很累的解决方法:切换到不可变项并将ChangeDetectionStrategy.onPush遍及整个应用程序以关闭默认的问题策略
- 对于每个异步事件,将每个绑定(Model-Dom绑定)与其旧值进行比较,以决定是否重新渲染。
- 反应
- 同样,到目前为止,JS对象的不可变集合仅可扩展。
- create-react-app内部使用Immutable.JS,而Immutable.JS在死之前只能创建大约500k不可变集合。
- 同样,到目前为止,JS对象的不可变集合仅可扩展。
这是您需要考虑的其他事项:
- 使用array.slice来操纵数组,以最小化额外的数组分配; array.slice将在适当位置修改数组,这将减少垃圾回收和总体堆大小。
- Chrome警告您链接到的网站存在恶意软件。 也许从站点获取信息并直接复制到此处而不是提供链接?
- 自从我7年前最初写答案以来,去年我已经对它进行了很多重写,但情况已经发生了很大变化,例如HTML5和其他内容。