Service Worker 的存储限制是多少?

What is the storage limit for a service worker?

大多数浏览器为 localStorage 提供每个域 5MB 的存储限制。 对service worker有这样的记忆limits/constraints吗?

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

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

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

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

但是,如果它是一台勉强运转的旧有限机器;你会很少

这完全取决于您真正想要做什么。你应该只真正使用服务工作者来存储对你的page/application工作

至关重要的东西

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

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

2018 年 1 月 15 日更新

StorageManager interface of Storage API is becoming a standard for all storage related api queries. As mentioned by , the estimate API would provide an estimate of the storage used a web app the available storage. Also, note the 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 日(只保留 reference/history)

最近看到这篇文章:offline-cookbook,内容如下:

您的 origin 获得了一定数量的免费 space 来做它想做的事。 免费 space 在所有原始存储之间共享 :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>
});

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

其他有用info/resources

  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 的更详细指南。

现在这些是与我的问题最相关的 articles/solutions。如果有人知道更好的文章或规格,请分享。

在最新的浏览器上,您可以使用 StorageManager which is an implementation of a new standard for browser storage, take a look at 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
*/

有关 navigator.storage.estimate()navigator.webkitTemporaryStorage.queryUsageAndQuota() 的更多信息在这里 https://developers.google.com/web/updates/2017/08/estimating-available-storage-space

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