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
根据 Addy Osmani Offline Storage for Progressive Web Apps
在 Chrome and Opera
中:您的存储是按来源计算的(而不是按 API)。两种存储机制都会存储数据,直到达到浏览器配额。应用程序可以通过配额管理 API(如上所述)检查他们使用了多少配额。
Firefox
无限制,但存储50MB数据后会提示
Mobile Safari
最大 50MB
Desktop Safari
无限制(5MB后提示)
IE10+
最大为 250MB,提示为 10MB
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
大多数浏览器为 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
例如代码:
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
根据 Addy Osmani Offline Storage for Progressive Web Apps
在
Chrome and Opera
中:您的存储是按来源计算的(而不是按 API)。两种存储机制都会存储数据,直到达到浏览器配额。应用程序可以通过配额管理 API(如上所述)检查他们使用了多少配额。Firefox
无限制,但存储50MB数据后会提示Mobile Safari
最大 50MBDesktop Safari
无限制(5MB后提示)IE10+
最大为 250MB,提示为 10MBEiji 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