JavaScript应用程序能存储的数据量是否有限制?
我猜这个取决于浏览器,每个浏览器都有自己的限制吧?
如果没有限制,那么会创建页面文件吗?如果是这样,那不安全吗?
JavaScript应用程序能存储的数据量是否有限制?
我猜这个取决于浏览器,每个浏览器都有自己的限制吧?
如果没有限制,那么会创建页面文件吗?如果是这样,那不安全吗?
在 Chrome 和 Chromium OS 中,内存限制由浏览器定义,您可以通过在开发者工具命令行中使用以下命令来检查该限制(按 F12 键):
> window.performance.memory.jsHeapSizeLimit
1090519040
在我的 Windows 10 操作系统上,它大约是1GB。
在 Chrome/Chromium 上,您可以通过分配本地数组来避免堆大小限制:
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帖子:
JavaScript中数组的最大大小,它建议您可以存储多达2 32 -1 = 4,294,967,295 = 42.9亿个元素。
JS9天文图像显示库网站上还有其他知识:处理内存限制。
(我试图找到一个好答案,“没有上限”答案让我觉得很傻。对于一项价值数百万美元的项目,我不能遇到生产问题并告诉管理人员:“好吧,我假设没有上限,一切都会没事。”试着进行概念验证,例如在您选择的JavaScript UI框架中加载大量组合框控件等。您可能会发现您的框架有一些性能降低。)
这里是一些缩放非常好的组件,无论是CPU性能还是内存性能:
以下是一些具有众所周知的性能下降的框架示例:
以下是一些其他需要考虑的事项:
据我所知,没有上限,您的脚本基本上可以使用内存,直到系统耗尽内存(包括虚拟内存)。没有上限并不意味着您必须全部使用,用户可能不喜欢这样。
我认为内存限制来自于浏览器。我们可以使用DevTools来查找问题。比如在Chrome中,按F12并输入window.performance.memory,您可以看到内存信息。
window.performance.memory
Javascript程序没有内存限制。你的脚本可以占用机器上的所有RAM。然而,不推荐使用用户机器上的全部内存。如果你处理了大量数据,建议考虑缓存。