【发布时间】:2014-06-23 17:42:14
【问题描述】:
浏览器能否对可存储在 JavaScript 对象中的数据量施加任何形式的限制?如果是这样,有什么方法可以检测到这个限制吗?
默认情况下,Firefox 似乎没有:
var data;
$("document").ready(function() {
data = [];
for(var i = 0; i < 100000000000; i++) {
data.push(Math.random());
}
});
这会继续消耗越来越多的内存,直到我的系统用完为止。
既然我们can't detect available memory,有没有其他方法可以告诉我们正在接近这个限制?
更新
我正在开发的应用程序依赖于非常快的响应时间才能使用(这是核心卖点)。不幸的是,它也有一个非常大的数据集(超过了在较弱的客户端机器上的内存)。通过策略性地抢先加载数据(猜测将点击什么)可以大大提高性能。当猜测不正确时,从服务器加载数据的回退是有效的,但服务器往返并不理想。我可以利用每一点内存使应用程序尽可能高效。
目前,它允许用户“配置”他们的性能设置(最大数据设置),但用户不想管理它。此外,由于它是一个 Web 应用程序,我必须处理用户对每台计算机的设置(因为功能强大的桌面比旧 iPhone 具有更多的内存)。如果它只使用系统上可用的最佳设置,那就更好了。但是猜测太高也会导致客户端计算机出现问题。
【问题讨论】:
-
如果您正在处理非常大的数据集,请考虑使用惰性流或迭代器。那里有几个库,不要脸的插件github.com/elclanrs/continuous.js
-
这是一个很好的问题,但您可能应该讨论您的实际问题/用例,因为它可能有一个更倾斜的解决方案。
-
@elclanrs 服务器端其实是多种语言。 Ruby 和 NodeJS 可能是最相关的。数据纯粹是性能优势。加载数据后,用户会立即单击一次。通过服务器往返(甚至通过 websocket),用户可以感觉到延迟。同样,这是应用程序有用性的核心。
-
假设磁盘寻道延迟没问题,您可以将数据缓存在 IndexedDB 中,并仅在需要时将其加载到内存中。
-
@LeviStanley 为什么要将所有数据保存在内存中?
标签: javascript