JavaScriptを使用してlocalStorageの値を検索する速度はどれくらいですか?
JavaScriptオブジェクトにデータをキャッシュする価値があるかどうかを示すパフォーマンステストへのリンクはありますか?それともブラウザは、とにかくlocalStorageからアクセスされる値をすでにキャッシュしていますか?
私は特にFirefoxと、Chrome localStorageの実装に興味があります。
価値のあるものとして、ここに jsperf test を示します。
localStorage
のベンチマークの使用は、FF7とIE9の両方で通常のオブジェクトプロパティへのアクセスよりもかなり遅いです。もちろん、これは単なるマイクロベンチマークであり、は必ずしも実際の使用方法やパフォーマンスを反映しているわけではありません...
FF 7の実行から抜粋したサンプルは、「大幅に遅い」という意味をops/secondで示しています。
ネイティブローカルストレージノート 小さなセット374,397 13,657 10の個別のアイテム 大きなセット2,256 68 100の個別のアイテム 読み取りバイアス10,266 342 1書き込み、10読み取り、 10種類のアイテム
また、 localStorageに配置できるものに関する制限 もあります。 YMMV。
小さなベンチマークを作成しました。私がやろうとしていることは、localStorageからデータをかなり頻繁に取得することです。 localStorage.getItemは同期操作ですが、恐ろしく聞こえるかもしれませんが、そうですか?
結果:
「検出されたアイテム:呼び出しあたり0.0007991071428571318ms」
「アイテムが見つかりません:呼び出しあたり0.0006365004639793477ms」
要するに、それを使うだけです。時間はかかりません。 1ミリ秒の0.0007
https://jsbin.com/resuziqefa/edit?js,console
let results = [];
let sum = 0;
localStorage.setItem('foo', 'foo bar baz foo bar baz foo bar baz foo');
for (let i = 0; i < 1000000; i++) {
let a = performance.now();
localStorage.getItem('foo');
let result = performance.now() - a;
sum += result;
results.Push(result);
}
console.log(`Item found: ${sum / results.length}ms per call`);
results = [];
sum = 0;
for (let i = 0; i < 1000000; i++) {
let a = performance.now();
localStorage.getItem('bar');
let result = performance.now() - a;
sum += result;
results.Push(result);
}
console.log(`Item not found: ${sum / results.length}ms per call`);
localStorage
とオブジェクトストレージを比較してもそれほど価値はありません。JavaScriptでの2つの目的は異なります。アプリでlocalStorage
を数回タッチするだけで、残りの作業はメモリ内で行われる可能性があります。
localStorage
に対するより良い比較は、その古典的な対応物、document.cookie
の比較です。 localStorage
とdocument.cookie
の両方の主な目的は、ブラウザの更新後も値を維持することです。
codsandbox.io の例をまとめました
localStorage
はdocument.cookie
より2桁高速です。Object
ストレージはlocalStorage
よりも1桁高速です(無関係ですが、参照用に追加されています)。localStorage
は、ブラウザの更新後も値を維持するための最速のメカニズムです。
Cookieを可能な限り高速にするためにcookieの正規表現ゲッターをプリコンパイルし、正確な測定のためにブラウザーのパフォーマンスAPIを使用していることに注意してください。すべてのテストは、一意のキーのセットを実行し、その後に同じキーを取得します。