サービスワーカーのストレージの上限は?
質問
ほとんどのブラウザは、ドメインごとに 5MB のストレージ制限を持つ localStorage を提供します。 サービス ワーカーに関してそのようなメモリ制限/制約がありますか?
ウェブ ワーカー(サービス ワーカーがベースとするもの)にはそのような制限がないことは知っています。しかし、Web Workers は正確にはアセット キャッシュに使用されるのではなく、処理に多く使用されます (したがって、そこでは CPU が主な関心事となります)。
メモリ サイズに制限がない場合、ひどいデザインの Web サイトがブラウザをクラッシュさせる可能性はありますか?
どのように解決するのですか?
2018年1月15日更新
は ストレージマネージャ インターフェースは、ストレージ関連のすべてのAPIクエリの標準になりつつあります。このインターフェースは ミゲル・ラトゥアーダ によって言及されているように 見積もり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日(参考/歴史としてだけ残しておく)
最近、こんな記事に出会いました。 オフライン料理本 という記事で、以下のように書かれています。
あなたの オリジンには一定の自由空間が与えられている を与えられています。その は、すべてのオリジンストレージで共有されます。 : 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 等を探さなければならないかもしれません)
その他の有用な情報/リソース
-
による Progressive Web Apps のオフラインストレージ by Addy Osmani
で
Chrome and Opera
: あなたのストレージはオリジンごと(APIごとではなく)です。どちらのストレージメカニズムも、ブラウザのクォータに達するまでデータを保存します。アプリは、Quota Management API (前述) を使用して、どれだけのクォータを使用しているかを確認できます。Firefox
制限なし。ただし、50MBのデータが保存されるとプロンプトが表示されます。Mobile Safari
最大50MBDesktop Safari
無制限(5MBを超えるとプロンプトが表示されます)IE10+
最大250MBまで、10MBでプロンプトが表示されます。 -
のより詳細なガイド モバイルブラウザでクォータを使用する 北村英治によるものです。
今のところ、これらは私の問題に最も関連する記事と解決策です。誰かがいくつかのより良い記事や仕様を知っている場合は、共有してください。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] モバイル端末の検出にはどのような方法がありますか?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] これは純関数ですか?
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?