服务工作者的存储限制是多少?

时间:2016-02-06 15:39:51

标签: javascript service-worker progressive-web-apps

大多数浏览器为localStorage提供每个域5MB的存储限制。 对服务工作者是否有这样的内存限制/约束?

我知道网络工作者(服务工作者所在的网络工作者)没有这样的限制。但Web Workers并不完全用于资产缓存,而是用于处理更多(因此CPU是主要问题)。

如果内存大小没有限制,那么设计糟糕的网站可能会使浏览器崩溃吗?

5 个答案:

答案 0 :(得分:66)

2018年1月15日更新

Storage API的StorageManager接口正在成为所有与存储相关的api查询的标准。正如@miguel-lattuada所述,estimate API会估算使用网络应用程序存储的存储空间。另请注意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,F​​ilesystem,当然还有Caches之间共享。

您获得的数量未指定,根据设备和存储条件的不同而不同。你可以通过以下方式了解你的情况:

navigator.storageQuota.queryInfo("temporary").then(function(info) {
   console.log(info.quota);
   // Result: <quota in bytes>
   console.log(info.usage);
   // Result: <used data in bytes>
});

以上代码might not work in all the browsers。 (例如:在chrome&lt; 48中可能需要查找webkitPersistentStorage等)

其他有用的信息/资源

  1. 根据Addy Osmani的Offline Storage for Progressive Web Apps

    Chrome and Opera中:您的存储是按来源(而非每个API)。两种存储机制都将存储数据,直到达到浏览器配额。应用可以使用配额管理API检查他们使用的配额(如上所述)。

    Firefox没有限制,但会在存储50MB数据后提示

    Mobile Safari最多50MB

    Desktop Safari无限制(5MB后提示)

    IE10+最大值为250MB,提示为10MB

  2. Eiji Kitamura对Working with quota on mobile browsers的更详细指南。

  3. 目前这些是我的问题最相关的文章/解决方案。如果有人知道更好的文章或规格,请分享。

答案 1 :(得分:9)

没有明确的限制。所有现代浏览器都是多进程或类似的,因此设计糟糕的页面(或SW)不会比崩溃本​​身更糟糕。

请注意,由于任何原因,SW规范非常明确地表示浏览器可以随时终止并重启SW。 (如果DevTools在页面上打开,Chrome会不断地为该页面杀死SW,以鼓励您采用良好的做法。)

答案 2 :(得分:2)

有关wx.EXPANDgbs.AddGrowableCol(0)的更多信息,请点击此处  https://developers.google.com/web/updates/2017/08/estimating-available-storage-space

测试页面在https://thimbleprojects.org/startpolymer/361372/

答案 3 :(得分:1)

在最新的浏览器上,您可以使用StorageManager这是浏览器存储新标准的实现,请查看this 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
*/

答案 4 :(得分:0)

我并非100%肯定,但我认为您完全受限于客户端计算机上的可用内容。如同,没有固定的上限

如果某人正在运行一台机器的野兽并且浏览器是唯一的活动应用程序,那么您很可能拥有足够的存储空间

然而,如果它是一台旧的有限的机器,几乎没有匆匆忙忙;你很少

这完全取决于你真正想做的事情。您应该只使用服务工作者来存储对您的页面/应用程序起作用至关重要的事物