Service Worker 的存储限制是多少?

新手上路,请多包涵

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

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

如果内存大小没有限制,设计糟糕的网站会导致浏览器崩溃吗?

原文由 Nachiketha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 987
2 个回答

2018 年 1 月 15 日更新

Storage API 的 StorageManager 接口正在成为所有与存储相关的 api 查询的标准。正如 @miguel-lattuada 所提到的, 估计 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、文件系统,当然还有缓存。

您获得的数量没有规定,它会因设备和存储条件而异。您可以通过以下方式了解您获得了多少:

 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 等)

其他有用的信息/资源

  1. 根据 Addy Osmani 的 渐进式 Web 应用程序离线存储

Chrome and Opera 中:您的存储是每个来源(而不是每个 API)。两种存储机制都会存储数据,直到达到浏览器配额。应用程序可以通过配额管理 API(如上所述)检查它们使用了多少配额。

Firefox 无限制,但存储50MB数据后会提示

Mobile Safari 最大 50MB

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

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

  1. Eiji Kitamura 关于 在移动浏览器上使用配额 的更详细指南。

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

原文由 Nachiketha 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Xanthir 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏