GoogleがKey-ValueストレージをChrome 74の組み込みモジュールとして実験
Googleは最近、Chromeの将来のバージョンで2つの新しいWICG提案を実装する意向を発表した。KVストレージ(Key-Valueストレージ)は、LocalStorageの利便性を実現しながらも、より優れたパフォーマンスを実現しようとしている。その目的は、インポートマップの提案を活用して、これを組み込みモジュールの最初の例として提供することである。
JavaScriptエコシステムでは、データをローカルに保存およびキャッシュするためにばらばらのアプローチをしていた。GoogleのソフトウェアエンジニアでWebプラットフォームの開発に携わっているPhilip Waltonが次のように説明する。
ブラウザベンダやWebパフォーマンスの専門家は、この10年間の大部分でlocalStorageは動作が遅く、Web開発者はそれを使うのをやめるべきだと言ってきました。公平に言うと、これを言っている人々は間違っていません。localStorageは、メインスレッドをブロックする同期APIである。アクセスするたびに、ページがインタラクティブに表示されなくなる可能性があります。問題は、localStorage APIが非常にシンプルで、localStorageに代わる唯一の非同期の選択肢がIndexedDBであることです。IndexedDB(目を向けてみよう)は、その使いやすさや歓迎されたAPIとして知られているわけではありません。
Web Incubator CG(WICG)は最近KV StorageをW3C IndexedDB仕様の一部にすることを推奨した。KV Storageは、ユーティリティはlocalStorageに似ているが、より現代的で、IndexedDBの上位層として実装される。この仕様では、ブラウザベンダが組み込みモジュールとして実装することを義務付けており、IndexedDBはバッキングストアとして使用する。
仕様で提供されているKVストレージAPIの使用例
import { storage } from "std:kv-storage"; // specifier prefix not final
(async () => {
await storage.set("mycat", "Tom");
console.assert(await storage.get("mycat") === "Tom");
for await (const [key, value] of storage.entries()) {
console.log(key, value);
}
// Logs "mycat", "Tom"
await storage.delete("mycat");
console.assert(await storage.get("mycat") === undefined);
})();
IndexedDBをサポートするブラウザ用のKVストレージポリフィルがある。
KV Storageモジュールは、JavaScript Standard Libraryイニシアチブおよびインポートマップに対するそのサポートの定義に従って解決される。
インポートマップは新しい概念ではない。AMDなどの以前のJavaScriptモジュールシステムおよび他のプログラミング言語のモジュールシステムの一部であった。インポートマップに含まれる標準のESモジュールは新しい。このインポートマップの提案は、JavaScriptのインポートステートメントとimport()式によって取得されるURLを制御する。それによって、マッピングをインポートしていない状況でも再利用できるようにする。インポートマップにより、シンプルなインポートステートメント、フォールバックモジュールの解決、組み込みモジュール用のポリフィル、そして、フェッチタグ、イメージタグ、リンクタグ間のコンテキストの共有などが可能になる。
この2つの期待される新しい機能の実装に成功すると、将来のバージョンのJavaScriptに機能が追加するプロセスが大幅に改善され、便利なWeb APIが追加されるはずである。インポートマップと組み込みモジュールは、拡張可能なWebマニフェストの欠けている部分を解決するために尽力している。
KV Storageを今すぐ試したい開発者は、ポリフィルを利用するか、Chrome DevかChrome 74のCanaryバージョンをインストールすることができる。これらの機能のメインストリームリリースの前に、開発者は、KV Storageのオリジントライアルに登録することで、これらの機能を特定のドメイン向けにすべてのChrome 74+ユーザが利用できるようにすることができる。