10月16日、RxDBが「LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite」と題したドキュメントを公開した。この記事では、ブラウザ内でデータを格納・クエリするためのさまざまな技術について詳しく紹介されている。

以下に、その内容を紹介する。
ストレージ系APIの概要
1. Cookies
Cookiesは主にセッション管理やパーソナライゼーション、トラッキングに使用される、小規模なキーバリューデータを格納するための技術だ。1994年にNetscapeによって導入され、全てのHTTPリクエストと共にサーバーに送信されるため、格納できるデータは限られている。また、最近ではChromeによるShared Memory Versioningや非同期のCookieStore APIなど、パフォーマンスの向上も図られている。
2. LocalStorage
LocalStorageは2009年にWebStorage仕様の一部として提案され、ブラウザに小規模なキーバリューペアを格納するためのAPIだ。主に5MBまでのデータを格納でき、セッションを超えてデータを保持する。APIはシンプルで、setItem、getItem、removeItem、clearの4つのメソッドを備えているが、非同期ではないため、重い操作を行うとUIがブロックされる。
3. IndexedDB
IndexedDBは、2015年に導入された低レベルのAPIで、大量の構造化されたJSONデータを格納するために使用される。非同期操作が可能で、インデックスを利用してデータの検索が行えるが、複雑なクエリをサポートしていない。また、IndexedDB 2.0以降のバージョンでは、getAll()メソッドの導入により、パフォーマンスが大幅に向上している。
4. OPFS (Origin Private File System)
OPFSは、バイナリデータをブラウザに格納するための新しいAPIで、大規模なデータ操作を想定している。OPFSは、主にライブラリ開発者向けに設計されており、通常のWebアプリケーションではあまり使用されないが、ファイルベースのデータ管理に適している。
5. WASM-SQLite
WASM (WebAssembly)を使用してSQLiteをブラウザ内で実行する技術で、ブラウザでネイティブのデータベースに近いパフォーマンスを発揮できる。SQLiteのバイトコードをWASMとしてブラウザにロードし、IndexedDBなどと連携してデータを格納する方法が一般的だが、WASMの特性上、初回ロードには約500msの時間がかかる。
パフォーマンスの比較
それぞれのストレージAPIの初期化時間、読み書きのレイテンシー、バルク操作のパフォーマンスを比較する。
初期化時間
まず、各APIの初期化時間を比較する。LocalStorageとCookiesは初期化が不要で即座に使用可能だが、IndexedDBやWASM-SQLiteはデータベースや仮想ファイルシステムの準備に時間がかかる。
技術 | 初期化時間(ミリ秒) |
---|---|
IndexedDB | 46 |
OPFSメインスレッド | 23 |
OPFS WebWorker | 26.8 |
WASM-SQLite(メモリ) | 504 |
WASM-SQLite(IndexedDB) | 535 |
小規模書き込みのレイテンシー
多くの小規模なデータを書き込む場合のレイテンシーを比較する。
技術 | 書き込み時間(ミリ秒) |
---|---|
Cookies | 0.058 |
LocalStorage | 0.017 |
IndexedDB | 0.17 |
OPFSメインスレッド | 1.46 |
OPFS WebWorker | 1.54 |
WASM-SQLite(メモリ) | 0.17 |
WASM-SQLite(IndexedDB) | 3.17 |
大量のデータ操作
200件のデータを一度に書き込む場合のパフォーマンスも比較する。
技術 | 書き込み時間(ミリ秒) |
---|---|
Cookies | 20.6 |
LocalStorage | 5.79 |
IndexedDB | 13.41 |
OPFSメインスレッド | 280 |
OPFS WebWorker | 104 |
WASM-SQLite(メモリ) | 19.1 |
WASM-SQLite(IndexedDB) | 37.12 |
読み込みパフォーマンス
100件のデータを一度に読み込む際のパフォーマンスも検証されている。
技術 | 読み込み時間(ミリ秒) |
---|---|
Cookies | 6.34 |
LocalStorage | 0.39 |
IndexedDB | 4.99 |
OPFSメインスレッド | 54.79 |
OPFS WebWorker | 25.61 |
WASM-SQLite(メモリ) | 3.59 |
WASM-SQLite(IndexedDB) | 5.84(キャッシュなし時35ms) |
まとめ
記事では、各ストレージAPIの特性を踏まえ、具体的な利用シナリオでの選択肢が提示されている。たとえば、LocalStorageは高速だが小規模データに限られ、IndexedDBは大規模データを扱えるものの、APIの複雑さが難点だ。OPFSやWASM-SQLiteは、パフォーマンスが高いが設定に時間がかかる。
詳細はLocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLiteを参照していただきたい。
The personal experience shared byAccent Test the blogger is extremely valuable! It's real and down-to-earth. For those facing similar situations, it's simply a guiding light.
From this blog, we can feel the blogger's sincerity and Tifa Deepsexenthusiasm. Sharing all knowledge and thoughts without reservation, this spirit is worthy of praise and learning.
The content is updated very timely! BringingZones TTS the freshest information and views to readers in the first place, always staying at the forefront. I must keep following.
This blog series is really interesting. Each article is coherent and has its own highlights. It's obvious that the blogger is making a systematic sharing. stimulation clickerLooking forward to more excellent works in the future.
How can IndexedDB's performance and usability be further optimized, particularly in terms of complex query execution and large-scale data Block Blast operations, without compromising its offline capabilities and data integrity?