2020-11-30 18:11:06
函数节流是一种将高频调用函数优化为按固定时间间隔执行的技术,核心目的是减少函数执行次数以提高性能,同时确保关键回调不被遗漏。 以下是具体实现方式、应用场景及总结:
一、函数节流的核心原理防抖:合并时间间隔内的多次调用,仅在触发结束时执行一次。
节流:固定时间间隔执行一次,无论触发频率多高。

结合两种方式的优点,确保首次立即执行且最后一次必定执行:
function throttle(cb, wait) { let preTimeStamp = 0; let timer = null; return function() { let nowTimeStamp = +new Date(); let difTimeStamp = nowTimeStamp - preTimeStamp; if (difTimeStamp < wait) { if (timer) return; timer = setTimeout(() => { cb.apply(this, arguments); timer = null; preTimeStamp = +new Date(); }, wait - difTimeStamp); return; } clearTimeout(timer); timer = null; cb.apply(this, arguments); preTimeStamp = nowTimeStamp; };}若时间差不足阈值,设置剩余时间的定时器(确保最后一次执行)。
若时间差超过阈值,立即执行并更新时间戳。
mousemove:跟踪鼠标移动时减少计算量。
scroll:滚动加载数据时避免频繁请求。
控制渲染帧率,避免画面卡顿。
搜索框实时联想(结合防抖更优)。
窗口大小调整时的布局重计算。
定时器实现:适合需确保最后一次执行的场景(如滚动加载到底部)。
时间戳实现:适合需立即响应的场景(如游戏控制)。
综合实现:推荐用于大多数业务场景,平衡性能与正确性。

通过合理使用函数节流,可显著提升页面性能,尤其在移动端和低性能设备上效果更为明显。实际应用中需根据场景选择实现方式,复杂需求可进一步扩展(如添加立即执行参数)。