2016-02-06 14 views
44

ほとんどのブラウザでは、localStorageにドメインあたりのストレージ容量が5MBに制限されています。 サービスワーカーにはこのようなメモリの制限/制約がありますか?サービスワーカーのストレージ制限はどのくらいですか?

私は(サービスワーカーが基づいている)ウェブワーカーは、そのような制限がないことを知っています。しかし、Webワーカーはアセットキャッシングに正確に使用されるのではなく、処理に多く使われます(CPUが主な懸念事項です)。

メモリサイズに制限がない場合、悪い設計されたWebサイトがブラウザをクラッシュさせる可能性がありますか?

+0

可能な複製です(HTTP ://stackoverflow.com/questions/11049797/maximum-running-web-worker-html5-at-the-same) –

+0

サービスワーカーを実装しているすべてのWebサイトがキャッシュを使い過ぎていないことを期待していますか?この問題は、資産キャッシングを目的としていないため、Webワーカーに関しては存在しません。 – Nachiketha

+1

私は、サンドボックスの限界で、その時点で各ページに利用可能なメモリとCPU + IOリソースの量を指定していると言います。また、従業員はサンドボックス全体でこれらのリソースを共有します。 –

答えて

52

アップデート2018年1月15日

ストレージAPIのStorageManagerインタフェースになってきているがすべてのストレージ関連のAPIクエリの標準です。 @miguel-lattuadaに記載されているように、estimate 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.`); 
 
    }); 
 
}
詳細情報については

、参照してください以下の2件の偉大な記事:


2017年3月16日(単に参照/歴史のためにそれを維持)

最近、私はこの記事に出くわした:次のように述べてoffline-cookbook

あなた原点は、一定量を与えています自由空間でそれが望むことをする。すべての起点ストレージ: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> 
}); 

上記のコードmight not work in all the browsersを:あなたは経由で持っているどのくらいのを見つけることができます。 Chrome and OperaでアディOsmani

によってOffline Storage for Progressive Web Appsを1として

他の有用な情報/リソース

  1. を:(例のためにクロム< 48 1にwebkitPersistentStorageなどを探すために必要がある場合があります):あなたのストレージを(APIごとではなく)原点ごとです。両方のストレージメカニズムは、ブラウザのクォータに達するまでデータを保存します。アプリは、クォータ管理API(上記の説明を参照)を使用してクォータの使用量を確認できます。

    Firefoxない限界が、50メガバイトのデータ記憶され

    Mobile Safari 50メガバイト最大

    Desktop Safari(5メガバイト後プロンプト)無制限

    IE10+は250メガバイトでmaxesと10メガバイト

  2. で求められた後にプロンプ​​トが表示されますKitamura Eiji著、Working with quota on mobile browsersの詳細なガイドです。

これは私の問題で最も関連性の高い記事/解決策です。誰かがもっと良い記事や仕様を知っていれば、分かち合いましょう。

+2

API間のストレージスペースを共有することは、ChromeとOperaでのみ有効です。 Addy Osmaniの投稿のよくある質問のセクションをご覧ください:https://medium.com/dev-channel/offline-storage-for-progressive-web-apps-70d52695513c#.8acehngnq –

+1

@DavidScalesが指摘してくれてありがとう。記事の参照で答えを更新しました。 – Nachiketha

+1

N.B. [storageQuota](https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota)はChrome v55 +とOpera 42+(基本的にはChromeですが)のためにのみ実装されています – icc97

1

私は100%確信しているわけではありませんが、私はあなたがクライアントマシンで利用可能なものによって完全に制限されていると思います。以下のように、それならば、あなたが最も可能性が高い。しかし、使用可能なストレージをたっぷり

を持っているだろう、誰かが機械の獣を実行していたし、ブラウザが唯一のアクティブなアプリケーションだった場合、一定の上限

はありませんあまりにも厄介な古い限られたマシンだった。あなたは非常に少ないだろう

それはあなたが本当にやろうとしていることに完全に依存します。あなたは実際にあなたのページ/アプリケーションの作業に不可欠なものを保存するためにサービスワーカーを使うべきです。

9

明示的な制限はありません。現代のブラウザはすべてマルチプロセスなので、ひどく設計されたページ(またはSW)はクラッシュするほど悪くはありません。

SW仕様は、ブラウザが何らかの理由でいつでもSWを強制終了して再起動できることを非常に明示しています。 (デベロッパーツールはページ上で開いている場合、Chromeは故意常にページのためのSWを殺し、グッドプラクティスを採用することをお勧めします。)

+8

私は@Nachiketha shuが揮発性メモリの使用ではなく、記憶スペースについて話していると信じています。 – Marco

1

最新のブラウザでは、ブラウザストレージの新しい標準の実装であるStorageManagerを使用できます。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 
 
*/

関連する問題