Thursday, March 21, 2019

NodeJS的debounce和throttle区别

axios是一个NodeJS的库,它含有两个函数来避免发过多request到后端,从而提高相应。

debounce防抖动:把触发非常频繁的事件(比如按键)合并成一次执行。若此时间段内,只有一个事件,它会在时钟的末尾执行。例子:autocomplete,resize等需要等待用户按键结束的用例。
throttle节流:保证每 X 毫秒恒定的执行次数。例子:无限滚动,没有事件或者事件带连续性的用例。

区别就是,防抖动是时间做阈值,而throttle就是用数量做阈值。例如automplete用防抖动实现,如果用户输入速度快于阈值,就不会发request到后端,只有当某次输入超过阈值,也就是这段时间内只有一个输入,才会发到后端。也可以看出防抖动属于延迟执行,也就是等待时间阈值后才实际执行。而节流是立即执行,但该时间段内其他的不再执行。还是用autocomplete的例子,若用节流实现的话,即使用户输入快于时间阈值,request还是会发,只发一个。

cancelToken: debounce还和cancelToken一起用,表示若发到后端的request已经发出,而用户现在输入,前端即使受到response也不再处理。若无此,可能输入新字母后还会出现前一次结果。甚至用户跳转到新页面了,网站当收到response后悔跳转到旧页面,用户会感到非常奇怪。

解释
官网定义
区别

No comments:

Post a Comment