Redux Saga + Socket 滞后

Redux Saga + Socket lags

我正在学习Redux-Saga,遇到这样的问题

我有一个每秒向我实时发送 40 多条消息的套接字。 这是通过 yield put 写入 Store 的,据我了解,数据没有时间写入,因为新数据已经到达 - 这会导致严重的滞后。

如果您不处理来自套接字的所有消息,则没有滞后。

告诉我如何解决这个问题?

如果需要,这里有一个示例代码:

套接字

socketOnmessage (pipe) {
  const data = yield take (channel);
  
  while (true) {
    yield put ({
      type: UPDATE_TABLE,
      payload: data,
    });
}

在减速器

types of cases. UPDATE_TABLE:
      return [... state, {... payload}]. splice (-80);

如果不了解 socketOnmessage 是如何触发的以及事情应该如何工作的管道,很难说清楚,但 while (true) { 循环几乎肯定是不正确的。基本上在 take 成功后,无限循环开始,并尽可能快地一遍又一遍地调用 yield put,永远不会停止,这肯定会使您的应用程序延迟。

至少 take 应该在无限循环内,所以 put 每个 take 只调用一次:

socketOnmessage (pipe) {
  while (true) {
    const data = yield take (channel);
    yield put ({
      type: UPDATE_TABLE,
      payload: data,
    });
}

那是因为 socketOnmessage 应该是一个生成器函数,以便调用 yield,这在您的示例代码中是不存在的。

如果修复后仍然有延迟,还有其他选择。它是每秒 40 条消息的恒定流吗?也许通过在每个事件上填充缓冲区并每 500 毫秒处理一次缓冲区中的所有事件来实现一个限制状态更新次数的缓冲区,只更新一次状态而不是更新每条消息的状态。