77

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

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

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

4

5 回答 5

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,内容如下:

您的来源有一定数量的可用空间来做它想做的事。该空闲空间在所有原始存储之间共享: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 应用程序的离线存储

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

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

    Mobile Safari最大 50MB

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

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

  2. Eiji Kitamura提供的有关在移动浏览器上使用配额的更详细指南。

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

于 2016-02-29T09:54:58.377 回答
8

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

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

于 2016-02-06T17:09:21.497 回答
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
*/

于 2017-10-25T12:52:24.267 回答
1

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

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

于 2017-11-21T16:47:57.443 回答
0

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

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

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

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

于 2016-02-06T15:49:20.913 回答