type
status
date
slug
summary
tags
category
icon
password
一、Throttle 基本概念与需求
节流(throttle)
在频繁触发事件时,每隔固定时间(delay)最多执行一次函数调用。
- 默认行为:
- 立即执行首次调用。
- 冷却期内忽略后续调用。
- 额外需求(Trailing):
- 若在冷却期内发生调用,需在冷却期结束后自动执行一次。
二、基础实现(无 Trailing)
最简单的 throttle 实现,仅在超过冷却期后允许执行:
- 仅首次立即执行。
- 冷却期内触发全部忽略。
三、添加 Trailing 实现
添加定时器(timer)实现 trailing 行为:
实现思路:
- 在原基础上记录冷却期内最后一次调用的参数。
- 添加 timer,在冷却期结束时执行 trailing 调用。
- 冷却期内如果存在调用,记录其参数。
- 若开启 trailing,且未设置 timer,则创建一个 timer,在冷却期结束时调用。
四、行为对比表
情况 | remain <= 0 | trailing | timer 存在 | 行为 |
1 | 是 | 任意 | 任意 | 立即执行 |
2 | 否 | false | 任意 | 忽略(节流) |
3 | 否 | true | 否 | 设置 timer trailing 执行 |
4 | 否 | true | 是 | 更新参数,不设置新 timer |
五、实现总结
- 基础版本:仅简单的时间戳判断实现节流。
- trailing 版本:在原基础上增加缓存参数与定时器,实现 trailing 功能。
以上即为 throttle 函数(含 trailing)的一步步优化实现过程。