服务辅助角色的存储限制是多少

What is the storage limit for a service worker?

本文关键字:多少 存储 角色 服务      更新时间:2023-09-26

大多数浏览器都提供localStorage,每个域的存储限制为5MB。对于服务工作进程,是否存在此类内存限制/约束?

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

如果内存大小没有限制,设计不良的网站会不会使浏览器崩溃?

更新 Jan 15 2018

Storage API 的 StorageManager 接口正在成为所有与存储相关的 API 查询的标准。如 @miguel-lattuada(-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 篇精彩文章:

  • MDN Web 文档 - 存储 API
  • 谷歌开发者:估计可用存储空间

三月16 2017(保留仅供参考/历史(

最近我看到了这篇文章:离线食谱,其中指出如下:

您的原点被赋予一定数量的自由空间来做它想做的事情。该可用空间在所有源存储之间共享:LocalStorage,IndexedDB,Filesystem,当然还有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>
});

上面的代码可能不适用于所有浏览器。(例如:在chrome<48中,可能需要寻找webkitPersistentStorage等(

其他有用的信息/资源

  1. 根据 Progressive Web 应用程序的离线存储 作者:Addy Osmani

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

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

    Mobile Safari 最大 50MB

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

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

  2. 关于在
  3. 移动浏览器上使用配额的更详细指南,作者是北村英二。

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

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

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

在最新的浏览器上,您可以使用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% 确定,但我认为您完全受到客户端计算机上可用内容的限制。如,没有固定的上限

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

然而,如果它是一台旧的有限机器,勉强可以继续前进;你就会很少。

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