服务人员的存储限制是多少?


76

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

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

如果对内存大小没有限制,那么设计不当的网站会导致浏览器崩溃吗?



因此,我们是否只是希望所有实施服务工作者的网站都不会过度使用缓存?对于Web工作人员而言,此问题不存在,因为它们并非旨在进行资产缓存。
Nachiketha

1
我会说这是沙箱的限制,它指定了当时每个页面可用的内存和CPU + IO资源的数量。员工将在沙盒中共享这些资源。
www.eugenehp.tk '16

1
不同浏览器的存储空间有所不同,但很可能遵循一些通用规则,如下所示:developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/…–
magiccrafter

1
几周前,我写了一篇有关此的博客文章。FWIW一直都在问我这个问题。love2dev.com/blog/…答案是不同的,但是或多或少取决于设备的可用空间。Cache API规范中没有任何内容可以控制配额。现在,大多数浏览器的确在所有存储API中按来源分配了资源。
克里斯·洛夫

Answers:


77

更新2018年1月15日

Storage API的StorageManager接口正在成为所有与存储相关的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,状态如下:

您的来源有一定的可用空间来执行其所需的操作。这个自由空间所有原来的存储共享:本地存储,索引资料,文件系统,当然缓存。

未指定您获得数量,具体取决于设备和存储条件。您可以通过以下方式了解您的收入:

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

  2. 北村英治(Eiji Kitamura)撰写了有关在移动浏览器使用配额的更详细的指南。

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


2
API之间共享存储空间可能仅在Chrome和Opera中是正确的。请查看Addy Osmani帖子的常见问题部分:medium.com/dev-channel/…–
David Scales,

1
@DavidScales感谢您指出。刚刚用文章参考更新了答案。
Nachiketha

1
NB storageQuota仅适用于Chrome v55 +和Opera 42+(无论如何基本上都是Chrome)
icc97

@ icc97正确。配额管理API仍处于草稿状态。已更新链接。谢谢
Nachiketha

8

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

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


9
我相信@Nachiketha shu在谈论存储空间,而不是易失性内存使用情况。
Marco Castelluccio

1

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



0

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

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

但是,如果这是一台几乎没有变化的旧式有限机器;你会很少

这完全取决于您实际上要做什么。您只应该真正使用服务人员来存储对您的页面/应用程序正常工作至关重要的内容

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.