我使用redux-saga takeLatest运行了LiveSearch。每次用户在字段中键入char时,都会启动新的API调用。
如果用户按住某个键,则会发生AutoRepeat并启动许多API调用。调试器显示它们变为待处理状态,并最终完成(200)响应数据。
因此AutoRepeat确实可以重击服务器。客户端也开始爬网,因为直到用户释放密钥后才会显示AutoRepeated字符。
我想减少由AutoRepeat引起的客户端和服务器上的负载。一些可能性是:-
1个redux-saga在网络级别取消了不必要的待处理请求 2个Redux-Saga节流阀请求 3在输入onChange / action方法上发生某种超时
哪个是最佳选择,如何?
下面是我的Saga代码
function addressLiveSearch(strName, strNbr) { // {"addr":{"strName":"Stor"}}
const url = __API__ + '/secure/addressLookup'
let payload = {}
if (strNbr.length > 0) {
payload = { "addr": { strName, strNbr } }
} else {
payload = { "addr": { strName } }
}
return axios.post(url, payload, { headers: { 'Accept': 'application/json' } })
}
function* pickUpLiveSearchSaga({ strName, strNbr }) {
try {
const response = yield call(addressLiveSearch, strName, strNbr)
const { data } = response
yield put(Actions.pickUpLiveSearchSucceded(data))
}
catch (err) {
console.log('pickUpLiveSearchSaga catch ' + err)
if (err.response && err.response.status == "401" && err.data == undefined) { // unauthorized
yield put(Actions.logout())
}
if (err.hasOwnProperty("message")) {
yield put(Actions.pickUpLiveSearchFailed(err.message))
return
}
yield put(Actions.pickUpLiveSearchFailed("Unknown network error"))
}
}