[解決済み] indexedDBはHTML5のローカルストレージと概念的にどう違うのですか?
質問
- indexedDBとローカルストレージはどちらもキーバリューストアです。何が キー/バリュー・ストアを2つ持つ利点は何ですか?
- indexedDBは非同期ですが、結合(最も時間のかかること)です。 は手動です。非同期呼び出しと同じスレッドで実行されるようです。 されました。これでどうやってUIをブロックしないのでしょうか?
- indexedDBはより大きなストアを可能にします。のサイズを大きくしてはどうでしょう? HTML5ストア?
- 頭を悩ませています。indexedDBは何のためにあるのか?
どのように解決するのですか?
IndexedDBは、ローカルストレージと同じようにKey-Valueストアではありません。 ローカルストレージは文字列を保存するだけなので、ローカルストレージにオブジェクトを置くには、通常次のようなアプローチをとります。 JSON.stringify それを
myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));
をキーとするオブジェクトを見つけるには、これで十分です。
uniq
しかし、ローカルストレージから myObject のプロパティを取得する唯一の方法は、オブジェクトを JSON.parse してそれを調べることです。
var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);
これは、ローカルストレージに1つまたは数個のオブジェクトしかない場合は問題ありません。 しかし、1000個のオブジェクトがあり、そのすべてにプロパティ
b
であるものだけに対して何かをしたいとします。
b==2
. ローカルストレージの場合、ストア全体をループして
b
というのは、無駄な処理が多いからです。
IndexedDBを使用すると
文字列以外のものを値
: "これには DOMString や Date などの単純な型、Object や Array のインスタンスも含まれます。
インデックスの作成
を、値に格納したオブジェクトのプロパティに追加します。 つまりIndexedDbを使えば、同じ1000個のオブジェクトを入れながら
b
プロパティを使用し、それを使って
b==2
ストア内のすべてのオブジェクトをスキャンするオーバーヘッドが不要になります。
少なくとも、そういう考え方はありますね。 IndexedDBのAPIはあまり直感的ではありません。
非同期呼び出しが行われたのと同じスレッドで実行されるようです。これでどうやってUIをブロックしないのでしょうか?
非同期とマルチスレッドは別物です。 JavaScriptは、原則としてマルチスレッドではありません。 . JSで重い処理をすると、UIがブロックされます。 ウェブワーカー .
indexedDBはより大きなストアを可能にします。HTML5のストアのサイズを大きくしてはいかがでしょうか?
なぜなら、適切なインデックスを作成しないと、サイズが大きくなるにつれて、どんどん遅くなってしまうからです。
関連
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] ローカルストレージとCookieの比較
-
[解決済み] HTML5 ローカルストレージとセッションストレージの比較
-
[解決済み] HTML5のローカルストレージのアイテムはいつ期限切れになりますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み】なぜJavaScriptはマルチスレッドをサポートしないのですか?