JavaScript内存限制

时间:2010-05-29 22:21:35

标签: javascript memory browser

JavaScript应用程序可以存储的数据量是否最大?

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

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

6 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:23)

在Chrome和Chromium OS中,内存限制由浏览器定义,您可以通过点击F12,在Developer Tools命令行中使用以下命令检查限制:

> 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关于Monitoring JavaScript Memory的博文。

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

另请参阅这些Stack Overflow帖子:

  1. Maximum size of an Array in Javascript,建议您最多可存储2个 32 -1 = 4,294,967,295 = 42.9亿个元素。

  2. Maximum number of arguments a JavaScript function can accept

  3. 关于JS9天文图像显示库网站的其他知识:Dealing with Memory Limitations

    (我试图找到一个好的答案,"没有上限"这里提供的答案对我来说太愚蠢了。我不能为一个价值数百万美元的项目遇到生产问题并且对管理层说,"嗯,我认为没有上限,一切都会好的。"尝试进行概念验证,例如在JavaScript UI框架中加载大量的组合框控件您可能会发现您的框架有一些performance degradation。)

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

    1. Angular:变化检测方法不佳。
      • 对于每个异步事件,将每个绑定(Model-Dom绑定)与其旧值进行比较,以决定是否重新呈现。
        1. NG1:> 2500名观察员,表现停滞
        2. NG2:同样的问题仍然存在,但你有一个长时间的累人解决方法:切换到不可变的并在你的应用程序上传播ChangeDetectionStrategy.onPush以关闭默认的问题策略
    2. 阵营
      • 同样,JS对象的不可变集合只能扩展到目前为止。
        1. create-react-app在内部使用Immutable.JS,而Immutable.JS在它死之前只能创建大约500k个不可变集合。
    3. 以下是其他一些需要考虑的事项:

      1. 使用array.slice for manipulating arrays最小化其他阵列分配; array.slice将修改数组,这将减少垃圾收集和整体堆大小。

答案 2 :(得分:3)

Javascript程序没有内存限制。您的脚本可能会占用计算机上的所有RAM。但是,建议不要耗尽用户计算机上的所有内存。如果您正在处理大量数据,我建议您查看缓存。

答案 3 :(得分:3)

Firefox支持选项" javascript.options.mem.max "如果你搜索它,你可以找到关于人们认为可行的合理价值观的讨论。

不确定有多少人可以在那里打扰并设置它,但是为自己说话我将它设置为128000(128M)。

答案 4 :(得分:3)

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

 window.performance.memory

enter image description here

答案 5 :(得分:2)

这可能因不同的Web浏览器而异,从观察来看,我是用Chrome(版本79.0.3945.130)安装的,每个任务最大2Gb。 当出现“在潜在的内存不足崩溃之前已暂停”消息时,Chrome调试器将暂停网页。

但是,调试器确实允许用户恢复网页操作(通常会导致网页崩溃),但是如果不崩溃,则所使用的内存可能会攀升至2Gb以上,该页面的运行速度通常会超出此点。好像2Gb是根据每个任务设置的。

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

这只是一个理论,我认为是正确的。请参阅所附图片

enter image description here

enter image description here

enter image description here