JavaScript 应用程序可以存储的数据量是否有上限?

我猜这是由浏览器处理的,每个都有其局限性?

如果没有限制,是否会创建一个页面文件? 如果是这样,那岂不是不安全?

#1楼 票数:42

在 Chrome 和 Chromium OS 中,内存限制由浏览器定义,您可以在开发人员工具命令行中按 F12 使用以下命令检查限制:

> window.performance.memory.jsHeapSizeLimit
1090519040

在我的 Windows 10 操作系统上,它大约是 1 GB。

在 Chrom(e/ium) 上,您可以通过分配本机数组来绕过堆大小限制:

var target = []
while (true) {
    target.push(new Uint8Array(1024 * 1024)); // 1Meg native arrays
}

这会使选项卡在 2GB 左右崩溃,这发生得非常快。 在那之后 Chrom(e/ium) 失控了,如果不重新启动浏览器就不可能重复测试。

我还建议您在深入研究尝试诊断或测量浏览器中任何内存相关的杂草之前阅读 TrackJS 的关于监控 JavaScript 内存的博文。

您还可以在 comp.lang.javascript 中搜索javascript memory limit

另请参阅这些 Stack Overflow 帖子:

  1. Javascript 中数组的最大大小,这表明您最多可以存储 2 32 -1 = 4,294,967,295 = 42.9 亿个元素。

  2. JavaScript 函数可以接受的最大参数数

JS9 天文图像显示库网站上还有其他知识:处理内存限制

(我试图找到一个好的答案,这里提供的“没有上限”的答案对我来说只是愚蠢的。我不能遇到数百万美元项目的生产问题并向管理层说,“好吧,我假设没有上限,一切都会好起来的。”尝试进行概念验证,例如在您选择的 JavaScript UI 框架中加载大量组合框控件等。您可能会发现您的框架性能有所下降。 )

以下是我发现在 CPU 性能和内存性能方面都具有很好扩展性的一些组件:

  1. 微软摩纳哥编辑
    • 这被几个商业项目使用:
      1. 邮递员,从 v7.1.1-canary08 开始
      2. VS代码

以下是一些众所周知的性能下降的框架示例:

  1. Angular:糟糕的变化检测方法。
    • 对于每个异步事件,将每个绑定(Model-Dom 绑定)与其旧值进行比较,以决定是否重新渲染。
      1. NG1:> 2500 名观察者,性能停滞不前
      2. NG2:同样的问题仍然存在,但你有一个很长累人的解决方法:切换到不可变并在你的应用程序中传播 ChangeDetectionStrategy.onPush 以关闭默认的有问题的策略
  2. 反应
    • 同样,JS 对象的不可变集合目前只能扩展。
      1. create-react-app 内部使用的是 Immutable.JS,而 Immutable.JS 在它死之前只能创建大约 500k 个不可变集合。

这里有一些其他的事情需要考虑:

  1. 使用array.slice 操作数组以最小化额外的数组分配; array.slice 将就地修改数组,这将减少垃圾收集和整体堆大小。

#2楼 票数:40 已采纳

AFAIK,没有上限,您的脚本基本上可以使用内存,直到系统耗尽内存(包括交换)。 没有上限并不意味着你必须吃完它,用户可能不喜欢它。

#3楼 票数:8

Firefox 支持选项“ javascript.options.mem.max ”,如果您搜索该选项,您可以找到有关人们认为可行的合理值的讨论。

不知道有多少人会费心去那里设置它,但就我自己而言,我将它设置为 128000(即 128M)。

#4楼 票数:5

我认为内存限制来自浏览器。 我们可以使用 DevTools 来解决这个问题。 就像在 chrome 中一样,按 F12 并输入 window.performance.memory 您可以看到内存信息。

 window.performance.memory

在此处输入图片说明

#5楼 票数:3

Javascript 程序没有内存限制。 您的脚本可以占用您机器上的所有 RAM。 但是,不建议用完用户机器上的所有内存。 如果您正在处理大量数据,我建议您检查缓存。

#6楼 票数:2

这可能因不同的 Web 浏览器而异,根据观察,我使用 Chrome(版本 79.0.3945.130)获得的最大容量为每个任务 2Gb。 当出现“在潜在的内存不足崩溃之前暂停”消息时,Chrome 调试器将暂停网页。

然而,调试器确实允许恢复网页操作(通常会导致网页崩溃),但如果它没有崩溃,则使用的内存可以远远超过 2Gb,超过这一点后页面通常会执行得更慢。 似乎 2Gb 是基于每个任务设置的。

即:我开发了一个基于 Web 的实时日志查看器,它显示日志信息,从一些本地日志文件中读取。 可以请求查看日志文件的百分比。 一些日志文件很大,可以包含 100 000 多行。 当请求查看所有这些行时,Chrome 会崩溃,但如果我请求一次查看这些行 10 000 行,则完全没有问题。 这让我得出“每个任务最大 2Gb”的结论。

这只是一个理论,我站纠正。 请参阅所附图片

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

  ask by Dänu translate from so

未解决问题?本站智能推荐:

1回复

内存Javascript

所以我有一个Angular网络应用。 它首先通过http请求获取数据,然后对它进行一些测试,然后根据结果进行显示。 完成后,我会定期检查是否没有数据更新。 如果有,我得到测试并显示它。 但是,使用多个小时后,浏览器(firefox和chrome)崩溃,并指出存在内存泄漏。 你知道它
1回复

Javascript应用程序内存处理

我有以下JS: 我有几个问题可能听起来很愚蠢,但我希望不会。 因此,“ x”内部是“ y”和“ div”。 现在,如果仅在这两个元素上使用它们,它们是否仍在浏览器的JS内“存在”或消失了? 基本上,我需要将它们设置为null以避免在无用的项目上使用任何额外的内存。 我也用JS写
1回复

使用javascript动态刷新图像时内存泄漏

我正试图摆脱浏览器中令人讨厌的内存泄漏。 这就是我想要做的: - 我会定期尝试使用javascript刷新HTML页面中的图像。 - 所有代码都应与Internet Explorer 6或更高版本以及Firefox兼容。 你可以在下面找到我的代码。 这就是我观察到的:每次
2回复

如何从对象和类中清除JavaScript中浏览器的内存?

我制作了三个场景的任务游戏。 玩家可以从一个场景移动到另一个场景然后返回。 (就像一个著名的经典任务:《虚无》,《金属漆》,《猴岛的诅咒》)每个场景都有自己的对象,类和图形元素包。 这是一个场景的脚本外观。 我想异步加载每个场景的脚本,以解决内存使用问题。 但是我意识到,即使我销毁了
2回复

我可以在浏览器的JavaScript应用程序中使用多少内存?[关闭]

我正在开发一个JavaScript应用程序(使用React,Redux ...)。 我的应用需要一些元数据才能工作,才能在树或表中显示对象。 我只是想知道是否应该一次从服务器加载所有这些元数据并将它们保存在内存中,还是应该在每次请求时仅执行所需的操作以最大程度地减少内存占用。 我的数据
1回复

哪些因素决定了Javascript应用程序的内存使用情况?

我有一个 Javascript 应用程序,它在一个设备上需要大约 50 MB,但在另一个设备上需要大约 80 MB,以 JS 堆大小来衡量。 令人讨厌的是,第一个设备在各个方面都具有更高的性能和资源,因此内存使用在那里不太重要或不重要。 在低性能设备上,80 MB 太多了。 哪些因素会导致在低性能设
1回复

管理屏幕外图像的内存

我有一个网页,我想使用html和javascript显示成千上万的图像。 在一张表中,每次一次只能看到大约24-30张图像(每行6张),所以我认为自己很聪明地编写了自己的JavaScript滚动条,例如向下滚动时,从2-3行开始构造屏幕的底部,并在图像附近动态加载图像,并删除可见区域顶部上方的
1回复

内存:Java,C++和JS

我对每种语言(js / c(c ++)/ java)如何处理内存有疑问。 我知道C及其派生类可以通过围绕“ malloc”之类的指针和函数进行直接内存管理。 我也知道Java在它自己的JRE中运行,据我了解,JRE是虚拟机。 要澄清的是,生成的字节码是否等于从OS的C源代码生成的可执行