节流(分流),与防抖(去抖)实现原理类似。本文主要讨论节流,镜像文章:防抖 - 理解,实践与实现。分开讨论防抖和节流,主要是为了让一些还不太了解节流防抖的读者可以有针对性地,逐一掌握它们。
如何用代码实现节流也是一个要点。本文采用按部就班地方式,先绘制一个案例的流程图,再根据流程图的逻辑编写节流功能代码。html
文章包含多个可交互案例,可经过博客原文实时查看案例
同时欢迎订阅个人博客
点击运行案例git
当鼠标移动时,mousemove事件频繁被触发。上方为未节流模式,每一次mousemove触发都会绘制一个圆点。而下方为节流模式,尽管mosuemove在鼠标移动时被屡次触发,但只有在限定时间间隔才会绘制圆点。github
经过上方案例,能够基本了解节流的做用: 频繁触发的事件,事件处理函数在必定的时间间隔内只执行一次。app
不过节流函数是如何作到的? 以上方案例为例,绘制其流程图以下。 函数
核心参数:性能
根据流程图的思路实现分流函数:优化
function throttle( func, wait ) { let timer function throttled( ...args ) { const self = this if ( timer == null ) { invokeFunc() addTimer() } function addTimer() { timer = setTimeout( () => { clearTimer() }, wait ) } function invokeFunc() { func.apply( self, args ) } } return throttled function clearTimer() { clearTimeout( timer ) timer = null } }
接下来,用编写的节流函数实现上方案例this
点击运行案例spa
无限的滚动条code
节流和防抖相似,都能有效优化系统性能,不过使用业务场景有所区别:
感谢你花时间阅读这篇文章。若是你喜欢这篇文章,欢迎点赞、收藏和分享,让更多的人看到这篇文章,这也是对我最大的鼓励和支持!
同时欢迎订阅个人博客