IndexedDB vs localStorage:どちらのブラウザーストレージを使うか

IndexedDB vs localStorage

IndexedDB vs localStorage:容量、速度、使い分け | We.Inc

IndexedDBとlocalStorageを並べて比較します。ブラウザーごとの容量制限、同期と非同期、それぞれが保存できるもの、そして1つのメモを両方に保存するライブデモを紹介します。

少しの小さな設定ならlocalStorageを選びましょう。保存できるのは文字列のみで、オリジンごとに約5 MiB、すべての呼び出しが完了するまでページをブロックします。本格的なデータにはIndexedDBを選びましょう。非同期でトランザクションに対応し、オブジェクト、日付、ファイルを保存でき、容量はディスクの一定割合です。下のデモでは1つのメモを両方に書き込みます。

要点まとめ

どちらのAPIも、タブを閉じた後も訪問者のブラウザーにデータを残し、どちらもページのオリジン単位で分けられます。違いは重さです。localStorageは1分で覚えられる小さな同期型の文字列マップで、IndexedDBはバージョン、オブジェクトストア、トランザクションを備えた小さなデータベースです。このページでは、ドキュメントに記載された実際の制限を示し、それぞれが何を返すかを実際に確認できます。

よくある質問

localStorageにはどれくらい保存できますか?

MDNでは、オリジンごとにlocal storageが5 MiB、session storageが5 MiB、合計10 MiBの制限と記載されています。値はUTF-16の文字列なので、収まる文字数は思ったより少なくなることがあります。制限を超えるとQuotaExceededErrorが投げられます。

IndexedDBにはどれくらい保存できますか?

ブラウザーとディスクによります。Chromium系ブラウザーでは、1つのオリジンがディスク全体の最大60%まで使えます。Firefoxのベストエフォートモードでは、ディスクの10%と、サイトグループごとの10 GiBのうち小さいほうです。Safariのブラウザーアプリではディスクの約60%です。実際の値はnavigator.storage.estimate()で確認しましょう。

IndexedDBはlocalStorageより速いですか?

ごく小さな値を1つ扱うだけなら、たいていlocalStorageのほうがコードを書くのも早く、実行速度も十分です。問題は同期的であることで、大きな読み書きはメインスレッドを止めてしまいます。IndexedDBはメインの処理の流れの外で作業し、完了したら知らせてくれるので、スクロールや入力がなめらかなままです。

ブラウザーがIndexedDBのデータを削除することはありますか?

あります。ストレージはデフォルトでベストエフォートなので、ディスクが逼迫するとブラウザーがオリジンのデータを削除することがあります。navigator.storage.persist()を要求すると永続モードに切り替わり、利用者本人しか消去できなくなります。Firefoxは許可を求めるプロンプトを表示し、ChromeとSafariは利用者のサイトの使い方から判断します。

ログイントークンにlocalStorageを使うべきですか?

いいえ。注入されたものを含め、ページ上のどのスクリプトもlocalStorageとIndexedDBを読めます。セッション識別子は、HttpOnly、Secure、SameSiteを付けたCookieに保存しましょう。ページのスクリプトからは読めません。

同期的であることがなぜ問題か

文字列と構造化複製

選ぶためのシンプルなルール

ブラウザー別のストレージ制限

数値はMDNのストレージ容量のページに記載されたものです。IndexedDB、Cache API、オリジンプライベートファイルシステムは同じ容量を共有します。

オリジンごとの容量

両方のAPIで同じ保存を行う

localStorage:文字列化、ガード、パース

try...catchはストアが満杯の場合やストレージがブロックされた場合に対応します。日付はパース後に手動で作り直す必要があります。

IndexedDB:開く、アップグレード、トランザクションで書き込む

onupgradeneededは初回と、バージョン番号が上がるたびに実行されます。オブジェクトストアを作れるのはここだけです。

空き容量を確認し、保持を要求する

estimate()はおおよそのバイト数を返します。persist()は、ブラウザーが永続ストレージを許可した場合にtrueで解決されます。

1つのメモを両方のストアに保存

このデモはあなたのブラウザー内だけで動きます。キーwe-demo-noteとデータベースwe-demo-dbに書き込み、消去ボタンで両方とも削除されます。

保存するメモ

金曜日に印刷会社へ電話する

両方に保存

読み戻す

容量を確認

デモデータを消去

まだ何も読み込んでいません。メモを保存してから「読み戻す」を押してください。

localStorageの戻り値

IndexedDBの戻り値

型:{v}

savedAtはDateか:{v}

何も保存されていません

メモをlocalStorageとIndexedDBに保存しました。

デモ用のキーとデータベースを削除しました。

このオリジンは、使用可能な約{v} MBのうち約{n} MBを使用しています。

このブラウザーはnavigator.storage.estimate()に対応していません。

このブラウザーでストレージ処理に失敗しました:{v}

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る