2016-11-05 12 views
2

私のWebSocketは短いバーストのデータの「ロット」を取得、1-2Sで最大1000個のオブジェクトが言うと、それぞれのために私は(店に追加する)これを実行する必要があります:dispatch({ type: NEW, payload })Reduxのパフォーマンスの低下

そして、 (FBS不変ヘルパーを使用して)実際の減速:

case NEW: 
    return update(state, { 
    data: { 
     [action.payload.tree.name]: 
    { $push: [action.payload.name] }, 
    }, 
    }); 

一度に10の項目を追加するには正常に動作し、100は数秒かかるし、最新のハードウェア上で実行されている1000のはかなりのオーバーロード私のクローム。

また、100個のアイテムを追加すると、ページを再レンダリングせず、ストアに追加されたとおりにそれぞれを表示するのではなく、「バースト」に含まれるすべてのものが追加されるまで待ちます。

答えて

2

ディスパッチャを起動する前にアップデートをバッチ処理し、個々のアップデートではなく統合されたアップデートの配列を受け入れるようにアクションを変更することを検討してください。

+0

ラージオブジェクトの最適化や回避をお勧めしますか?私は10kのキー(歴史的な図表)を持つオブジェクト(id =>オブジェクトのマップ)を持っており、最後の段階では非常に遅いです。他の部分(バッチ処理されたAPIリクエストからのデータの並べ替えやマージも)は、(setTimeoutを介して)マイクロタスクとして最適化されていますが、実際にはオブジェクト割り当てをどうするのか分かりません... – AlkH

+0

いくつかの解決策が見つかりました。https: //github.com/reactjs/redux/issues/606 – AlkH

+1

ボトルネックをレデューサーとしてどのように特定しましたか?あなたの店が更新された後に起こるDOMアップデートですか? DOMの更新がキーの場合は、ビューポート内の項目のみが更新されるウインドウ付きのレンダリングを調べます。減速機に実際に入っている場合、あなたのデータは実際に店舗に住む必要がありますか、それとも地元の州/小道具などに留まることができますか? – squall3d

関連する問題