- 441 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 01:56:59.51 ID:jF13U7nK.net]
- IndexedDBのスループットが全く出ないんだが、誰か高速実装サンプルコードを知らないか?
URLくれると有り難い。 こちらの実装では、スクレイプ結果の9000ファイルを書き込むのに15-20分かかっている。 全体の容量は、IndexedDB格納済みで20MB程度、tarファイルだと30MB弱といったところ。 キャッシュ済みの状態なら再スクレイプには2-3分しかかからない。 これを<a download=xxx>でtarファイルにするのには数秒しかかからないが、(最後のダウンロードに数秒) IndexedDBに全て書き込むには15-20分かかる。 この場合はスクレイプと同時に内部的にtarファイルを作成しており、 大半は再スクレイプの時間なので比較としては不適だが、5-10倍程度遅い。(A) なおtarファイルの展開には2-3分かかるので、これとの比較でも5-10倍程度遅い。(B) 現状、ファイルに落とす場合はスクレイプの方が明らかに遅いので全く問題ないのだが、 IDBに格納する場合はスクレイプよりも遅いのでそこで詰まる。 といっても2倍も遅くはなく、またスクレイプ側は通常は90%以上idle状態なので 現実的には問題は発生しないはずだが、それにしても遅すぎる。 トランザクション等の機能は所詮CPU時間なので、何をやってもここまで遅くはならない。 (chromeの実装が酷くても、また俺の実装が酷くても) 上記ファイル時間(B)でも5-10倍遅いのは何かおかしい。 とはいえ使い方が悪い可能性も多々ある訳なのだが、 とりあえず高速実装サンプルコードがあれば比較出来るので助かります。 実装/実験の詳細は、上記の通り、9000ファイルをIDBに格納、全体で20MB程度、 objectStoreは多めで150個程度、その中に30-150個くらいのファイルがそれぞれ格納される。 トランザクションはオブジェクトストア毎に纏めており、 実際のトランザクションは40-80個程度で、大半は平行可能。(仕様としては) 一つのトランザクション内には20個ずつputを入れている。 (トランザクション単位でのロールバックなので今回は20個くらいが適当かと思っている) ただしいかんせん書き込んでくれない。 何かヒントあればよろしく。
|

|