Service Worker 的存储限制是多少?

IT技术 javascript service-worker progressive-web-apps
2021-03-12 11:21:26

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

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

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

5个回答

2018 年 1 月 15 日更新

Storage APIStorageManager接口正在成为所有与存储相关的 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 等)

其他有用的信息/资源

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

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

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

    Mobile Safari 最大 50MB

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

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

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

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

@DavidScales 感谢您指出。刚刚用文章参考更新了答案。
2021-04-17 11:21:26
API 之间共享存储空间可能仅适用于 Chrome 和 Opera。查看 Addy Osmani 帖子的常见问题部分:medium.com/dev-channel/...
2021-04-21 11:21:26
NB storageQuota仅适用于 Chrome v55+ 和 Opera 42+(无论如何基本上都是 Chrome)
2021-04-21 11:21:26
@ icc97 正确。配额管理 API 仍处于草案状态。用链接更新。谢谢
2021-05-11 11:21:26

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

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

我相信@Nachiketha shu 在谈论存储空间,而不是易失性内存使用。
2021-05-15 11:21:26

在最新浏览器上,您可以使用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

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

我不是 100% 确定,但我认为您完全受到客户端计算机上可用内容的限制。如在,没有固定的上限

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

但是,如果它是一台几乎无法运转的旧式有限机器;你会很少

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