大多数浏览器为 localStorage 提供每个域 5MB 的存储限制。服务工作者是否有这样的内存限制/约束?
我知道网络工作者(服务工作者所基于的)没有这样的限制。但是 Web Workers 并不完全用于资产缓存,而是更多地用于处理(因此 CPU 是那里的主要问题)。
如果内存大小没有限制,设计糟糕的网站会导致浏览器崩溃吗?
大多数浏览器为 localStorage 提供每个域 5MB 的存储限制。服务工作者是否有这样的内存限制/约束?
我知道网络工作者(服务工作者所基于的)没有这样的限制。但是 Web Workers 并不完全用于资产缓存,而是更多地用于处理(因此 CPU 是那里的主要问题)。
如果内存大小没有限制,设计糟糕的网站会导致浏览器崩溃吗?
2018 年 1 月 15 日更新
Storage API的StorageManager接口正在成为所有与存储相关的 API 查询的标准。正如@miguel-lattuada所提到的,估计 API将提供对使用 Web 应用程序可用存储的存储的估计。另外,请注意QuotaExceededError异常,它可以帮助我们处理错误场景。
例如代码:
if ('storage' in navigator && 'estimate' in navigator.storage) {
navigator.storage.estimate().then(({usage, quota}) => {
console.log(`Using ${usage} out of ${quota} bytes.`);
}).catch(error => {
console.error('Loading storage estimate failed:');
console.log(error.stack);
});
} else {
console.error('navigator.storage.estimate API unavailable.');
}
有关更多信息,请参阅以下 2 篇精彩文章:
2017 年 3 月 16 日(仅供参考/历史记录)
最近我看到了这篇文章:offline-cookbook,其中说明如下:
您的原点有一定数量的可用空间来做它想做的事情。该可用空间在所有原始存储之间共享:LocalStorage、IndexedDB、Filesystem,当然还有缓存。
在你获得量没有只具备,它会因所选的设备和储存条件。您可以通过以下方式了解您获得了多少:
navigator.storageQuota.queryInfo("temporary").then(function(info) {
console.log(info.quota);
// Result: <quota in bytes>
console.log(info.usage);
// Result: <used data in bytes>
});
上面的代码可能不适用于所有浏览器。(例如:在 chrome<48 中,可能需要查找 webkitPersistentStorage 等)
其他有用的信息/资源
根据Addy Osmani 的渐进式 Web 应用程序的离线存储
In Chrome and Opera
:您的存储是每个源(而不是每个 API)。两种存储机制都将存储数据,直到达到浏览器配额。应用程序可以通过配额管理 API(如上所述)检查他们使用了多少配额。
Firefox
无限制,但存储50MB数据后会提示
Mobile Safari
最大 50MB
Desktop Safari
无限制(5MB后提示)
IE10+
最大为 250MB,提示为 10MB
目前,这些是为我的问题找到的最相关的文章/解决方案。如果有人知道一些更好的文章或规格,请分享。
没有明确的限制。所有现代浏览器都是多进程或类似的,因此设计不当的页面(或 SW)不会比崩溃本身更糟糕。
请注意,SW 规范非常明确地指出浏览器可以随时出于任何原因终止和重新启动 SW。(如果 DevTools 在页面上打开,Chrome 会故意不断地杀死该页面的 SW,以鼓励您采用良好的做法。)
在最新浏览器上,您可以使用StorageManager,它是浏览器存储新标准的实现,请查看这篇mozilla 文章。
let _storageStats = await navigator.storage.estimate();
console.log(_storageStats);
/*
Will prompt something like this
{quota: 15946471833, usage: 682}
Which is a representation of quota/usage in bytes
As you can see I get an insane quota of almost 16 GB
*/
有关更多信息navigator.storage.estimate()
,并navigator.webkitTemporaryStorage.queryUsageAndQuota()
在这里
https://developers.google.com/web/updates/2017/08/estimating-available-storage-space
我不是 100% 确定,但我认为您完全受到客户端计算机上可用内容的限制。如在,没有固定的上限
如果有人正在运行机器的野兽并且浏览器是唯一的活动应用程序,那么您很可能有足够的可用存储空间
但是,如果它是一台几乎无法运转的旧式有限机器;你会很少
这完全取决于你真正想要做什么。您应该只真正使用服务工作者来存储对您的页面/应用程序工作至关重要的东西