2016-11-05 184 views
2

我的WebSocket獲取短突發數據的「很多」,說的最多的1-2S併爲每個1000個對象我必須這樣做(添加存儲):dispatch({ type: NEW, payload })終極版性能下降

而實際減速機(使用FB的不變性助手):

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

一次添加10個項目工作正常,100需要幾秒鐘和1000個幾乎重載上最新的硬件上運行我的鉻。

我也很難理解,爲什麼當添加100個項目時,例如,它不會重新呈現頁面並在添加到商店時顯示每個頁面,而是等待添加所有出現的「突發」。

回答

2

考慮在點擊調度程序之前批量更新,並修改您的操作以接受整合的更新數組而不是單個更新。

+0

您能否提出一些建議來優化或避免複製大型對象?我有10k鍵(歷史圖表)的對象('id => object'的地圖),在最後階段 - 減速器非常緩慢。其他部分(甚至從批量API請求中排序和合並數據)經過優化,並作爲微任務(通過setTimeout),但我真的不知道如何處理對象... – AlkH

+0

找到了一些可能的解決方案:https: //github.com/reactjs/redux/issues/606 – AlkH

+1

您是如何識別減速器的瓶頸?這可能是在商店更新後發生的DOM更新嗎?如果DOM更新是關鍵,那麼請查看只更新視口中的項目的窗口渲染。如果它真的在減速器中,那麼你的數據是否真的需要在商店中生存,還是可以保持在本地狀態/道具等? – squall3d