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 毫秒处理一次缓冲区中的所有事件来实现一个限制状态更新次数的缓冲区,只更新一次状态而不是更新每条消息的状态。
我正在学习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 毫秒处理一次缓冲区中的所有事件来实现一个限制状态更新次数的缓冲区,只更新一次状态而不是更新每条消息的状态。