[WEB App]Storage Benchmark v1.0 - IndexedDB vs OPFS (SyncAccessHandle) 比較検証ツール

[WEB App]Storage Benchmark v1.0 - IndexedDB vs OPFS (SyncAccessHandle) 比較検証ツール

Storage Benchmark v1.0 (IndexedDB vs OPFS)

IndexedDBとOPFS(Origin Private File System)のストレージ書き込みパフォーマンスおよび、ミリ秒単位の処理レイテンシ(遅延)をリアルタイムで視覚的に比較検証できるブラウザ完結型ベンチマークツールです。

Web版PhotoshopやVS Code Web、SQLite Wasmなどの高度なWebアプリケーションで採用が進むOPFSと、従来の標準ストレージであるIndexedDB。それぞれの書き込み処理速度と、スレッドの引っかかり(レイテンシスパイキング)の発生頻度を視覚的に観察・比較できます。

スクリーンショット

起動:

Storage Benchmark v1.0 - 起動

ベンチマーク実行:

Storage Benchmark v1.0 - ベンチマーク実行

動画(GIF):

Storage Benchmark v1.0 - 動画(GIF)

ツール


特徴

Web Worker によるノンブロッキング並行計測

メインスレッドを停止させることなく精度高く計測するため、IndexedDB/OPFSの測定処理は独立したWeb Worker上で実行されます。バックグラウンドでの書き込み負荷をリアルタイムにUIへ描画します。

OPFS(SyncAccessHandle)の検証

Web Worker内でのみ利用可能な高速同期API FileSystemSyncAccessHandle による直書き・ランダムアクセス(シーク書き込み)のパフォーマンスを計測できます。

1ブロック単位のレイテンシ可視化

単なる全体の実行時間だけでなく、書き込み1ブロックごとに要した時間をミクロに計測し、遅延時間に応じて緑( 10ms)から赤( 100ms)へカラーコード化してキャンバスに描画します。ガベージコレクションや内部キューの詰まりによる「カクつき・遅延スパイク」の有無が一目でわかります。

動的な負荷パラメータ調整

総ブロック数、1ブロックあたりの書き込み回数、1回のチャンクサイズ(4KB〜256KB)を自由に変更し、多様なアクセスパターンでの負荷テストが可能です。


使い方

  1. パラメータを設定する
    • 総ブロック数: 描画される全ブロックの数量(標準: 600)
    • 書き込み回数/ブロック: 1ブロック内でループ実行する書き込み回数(標準: 20)
    • チャンクサイズ: 1回の書き込みデータサイズ(4KB / 16KB / 64KB / 256KB)
Storage Benchmark v1.0 - 使い方:1. パラメータを設定
  1. 「スキャン開始」をクリックする
    • IndexedDBとOPFSの2本のWorkerが同時に駆動し、書き込みテストがスタートします。
Storage Benchmark v1.0 - 使い方:2. スキャン開始
  1. リアルタイムマップと総処理時間を確認する
    • 各ブロックが判定色で塗り潰されていきます。
    • レーン右上に表示される「時間」でトータル処理速度を比較します。
    • 赤やオレンジのブロックが多いレーンほど、不定期な処理の引っかかりが発生しています。

測定仕様・比較項目

項目IndexedDBOPFS (SyncAccessHandle)
実行環境Main / WorkerWeb Worker 専用
I/O 方式非同期トランザクション (put)同期直書き (write + at)
アクセス特性キー・バリュー保存(再構築オーバーヘッド有)ダイレクトファイルシーク / ランダムアクセス
レイテンシ安定度ガベージコレクション等によるスパイクが発生しやすいフラットで極めて安定( 10msの連続 )
主な用途構造化データ保存、小規模キャッシュDBエンジン(SQLite)、大容量バイナリ、3D/画像エディタ

技術スタック

  • Astro — サイト構築・ページレンダリング
  • HTML5 Canvas — ベンチマーク結果の描画
  • Web Workers (Blob URL) — バックグラウンドストレージI/O処理
  • Origin Private File System (OPFS) — 同期ファイルアクセスAPI
  • IndexedDB API — 非同期オブジェクトストレージ処理

開発の経緯

Webアプリで大容量バイナリやSQLiteデータベースを扱う際、「なぜ大手のWebプロダクト(Web版PhotoshopやSQLite Wasm等)はIndexedDBではなくOPFSへ移行しているのか」を定量的かつ視覚的に検証するために開発しました。

単に「トータルで何秒かかったか」だけでなく、60fps/120fpsが求められるインタラクティブなWebアプリにおいて致命傷となる**「一瞬のフレーム落ち(レイテンシスパイキング)」**がどのストレージでどのように生じるのかを可視化することを目指しました。

検証結果として、トータル処理時間で2.5倍以上の差が出るだけでなく、IndexedDBでは散発的な遅延スパイクが発生するのに対し、OPFS(SyncAccessHandle)は常に一貫して均一な高速処理を維持できることが実証できます。


更新履歴

  • [2026/08/27]: 初版リリース。IndexedDB vs OPFSのリアルタイム・レイテンシスキャン機能、動的パラメータ設定に対応。