現在のプロジェクトでは、firebase websocketサブスクリプションを扱っています。異なるコンポーネントは、異なるデータにサブスクライブすることができます。すべての項目のリストでListItem
のコンポーネントは、SUBSCRIBE
アクションをにディスパッチし、UNSUBSCRIBE
アクションをディスパッチすることによってサブセッションをcomponentWillUnmount
にディスパッチすることによって、その特定のアイテムのwebsocket "イベント"をサブスクライブします。redux-sagaで多数のイベントへのサブスクリプション/サブスクリプションの処理
マイサガは、次のようになります。
const subscriptions = {}
export function * subscribeLoop() {
while (true) {
const { path } = yield take(SUBSCRIBE)
subscriptions[path] = yield fork(subscription, path)
}
}
export function * unsubscribeLoop() {
while (true) {
const { path } = yield take(UNSUBSCRIBE)
yield cancel(subscriptions[path])
}
}
export function * subscription (path) {
let ref
try {
const updateChannel = channel()
ref = api.child(path)
ref.on('value', snapshot => {
updateChannel.put(snapshot.val())
})
while (true) {
const data = yield take(updateChannel)
yield put(handleUpdate(path, data))
}
} finally {
if (yield cancelled()) {
ref.off()
ref = null
}
}
}
私は、これはこれに対処するための正しい方法ではないと仮定 - それは、500の項目のリストに確かにかなり遅いです。
パフォーマンスを最適化するにはどうすればよいですか?
- フォークする必要がありますか?
- 他のものを処理するためのスペースをスレッドに与えるために何らかの遅延を導入すべきでしょうか?
ヒントはありがたいです。