2016-08-29 13 views
0

Webアプリケーションの初期使用で〜2Kレコードをダウンロードし、オフラインで使用するためにIndexedDBに保存する必要があるシナリオがあります。私のテストでは、すべてのレコードがロードされてインデックスに登録されると、パフォーマンスはすぐに見えます。しかし、明らかにインデックス作成中であり、その間に応答しない期間があります。それは理解できますが、IndexedDBが "索引付け中"なのか、それとも何かを知る方法はありますか?私はIndexedDBのドキュメントで何かを見つけることができません。このようなことは、ユーザーがそれを認識している場合、より良いユーザーエクスペリエンスを提供します。IndexedDB - インデックス作成の検出

答えて

1

同期APIまたは非同期APIを使用していますか?非同期の場合は、おそらくブラウザをフリーズするべきではありません。たぶん、タイムアウトイベントを追加することができます。 100ミリ秒よりも長く実行されると、ブラウザがインデックス作成に忙しく働いている可能性があります。

+0

お返事ありがとうございます。私は非同期です。ブラウザをフリーズしているわけではなく、特定の呼び出しがインデックス作成が完了するのを待っているように見えます。 size()関数が動作して正しいカウントを返すので、すべてのレコードはDBにあります。私はタイムアウトイベントを調べてあなたの投稿を続けます。 –

2

実際には、インデックス作成を観察できるということは仕様にはありません。これは舞台裏で起こることを意図しており、完了したとき(例えば、既存データのキー制約エラーのためにトランザクションがコミットまたはアボートする場合)にのみ観察可能となるように意図されている。新しいインデックスが作成されているときに特定のブラウザが応答しなくなった場合は、ブラウザに対してバグを報告する必要があります。

少なくとも、createIndex()コールは「インスタント」である必要があり、オブジェクトストア内の値を移動してインデックスエントリを計算することによって、インデックスは非同期的に読み込まれます。これはcreateIndex()呼び出しが行われた同じプロセスとスレッドで発生し、同じスレッド上の他のアクティビティと競合します(たとえば、適切な作業を優先順位付けしないと、アニメーションが遅くなることがあります)。

1

ここに同じ問題があります。クロムのみを使用します。他のブラウザについては考えられません。

私がインデックスを作成するまでは問題ありませんでした。クロールするのが遅くなります。開発者ツール - >アプリケーションタブでindexeddbをクリアすると簡単に繰り返します。ページを更新します。

私の側では、私はいくつかの "約束"ロジックを追加する必要があります。そこでは、各店舗の作成/「インデックス」の作成/各店舗へのデータの初期追加をそれぞれの約束ロジックに分解する。私はwww.promisesjs.comが読む価値があるかもしれないと言いたい。

私はさまざまなパッケージスクリプトから離れようとしています。それらのうちのいくつかは、 "bulkadd"と "bulkadd"機能を使用した場合のパフォーマンス向上のステートメントを単に "追加"したものがあります。 pouchdb、localforge、db.js、dexie.js、backbone?、bookshelf?心に浮かぶいくつかのパッケージ化されたスクリプトです。 BEFORE WARNED:パッケージ化されたスクリプトの中には、ロジックのような独自の約束があります。組み込みの約束ロジックを使用したり使用したりしないと問題が発生する可能性があります。

メモ:他のデータベースのSQLは突然大きなヒットでデータを追加またはダンプするため、indexeddbは変わりません。より良いフレーズの不足のために最初の "インストールラグ"を過ぎると、すべてが円滑に動くはずです。あなたのアプリ自体はCPU集約的です。今私はそれについて考えて、データベースのようなほとんどのsqlは、データのダンプ/エクスポートやインポートには、タイムアウトスクリプトが組み込まれています。大規模なデータベーステーブルで時間がかかることが原因です。

関連する問題