ニュース

「Chrome 129」では「IndexedDB」が高速化 ~Googleが新しい最適化を導入へ

「Snappy」圧縮でディスク消費とパフォーマンスを改善

公式ブログ「Chrome for Developers」

 「Google Chrome」の次期バージョン「Chrome 129」では、「IndexedDB」で新たな最適化が行われるとのこと。利用するディスクスペースを削減できるほか、特定のケースでパフォーマンスの向上が期待できるという。

 「Chrome」の「IndexedDB」実装には「LevelDB」とよばれるキーバリュー(key–value)型データベースライブラリが採用されており、与えられたキーに対応する値を高速に検索できる。しかし、値がデータベースページのサイズを超えるとパフォーマンスが落ちてしまうという欠点も抱えていた。

 そこで2017年以降、「Chrome」はページサイズより大きな値をデータベースファイルと同じディスク上へプレーンファイルとして保存している。こうすることで検索パフォーマンスを保つとともに、サイズの大きなデータを引けるようにしていたわけだ。

 「Chrome 129」ではこの仕組みをさらに改善し、外部保存されるプレーンファイルがリアルタイム圧縮ライブラリ「Snappy」で圧縮されるようになる。

 これによる利点は、まずストレージの節約だ。とくにJavaScriptで扱う配列データ、XML/JSONといった構造化データが大きい場合は効果的で、高い圧縮率が得られる。

 次に、圧縮後のファイルが「LevelDB」のページサイズに収まる場合に、値データの外部保存は必要なくなる。ディスクI/Oが減るため、全体的なパフォーマンス向上が期待できる。

 「Snappy」圧縮・解凍処理のボトルネックは気になるところだが、このライブラリは圧縮率を最大化することよりむしろ速度を最適化することを重視しており、影響は小さいようだ。また、圧縮・解凍処理をレンダラープロセス内で行うことにより、ブラウザープロセスに送信されるメッセージのサイズを削減するといった工夫も行われているとのこと。同社によると一部の処理は以前より2~3倍高速化されているという。

 プレリリース版の「Chrome 129」でこの仕組みを体験するには、以下の機能フラグを付けて「Chrome」を起動すればよい。

--enable-features="IndexedDBCompressValuesWithSnappy"

 なお、「Snappy」圧縮はこの仕組みが導入された後の新規データにのみ適用される。既存のデータでメリットを享受するには、開発者側でデータを再保存する必要があるだろう。