博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解节流与防抖
阅读量:5904 次
发布时间:2019-06-19

本文共 1413 字,大约阅读时间需要 4 分钟。

节流 Throttling

节流限制了一个函数可以在短时间内被调用的次数。可以这样形容:在一毫秒内最多执行此函数 1 次。

Throttling enforces a maximum number of times a function can be called over time. As in "execute this function at most once every 100 milliseconds."

再换句话说:

节流会忽略在短时间内高频发生的事件,只按照计划好的频率触发。

//fn 要执行的函数//delay 计划好的执行间隔//返回一个函数function throttled(fn, delay) {    let lastCall = 0;//初始化lastCall    return function (...args) {        const now = (new Date).getTime();//当函数被运行,获取当前时间        if (now - lastCall < delay) {                //这里(now - lastCall)就是间隔时间                       return;//如果间隔时间小于计划好的执行间隔,什么也不做。        }        lastCall = now; //更新lastCall        return fn(...args);    } }

防抖 Debouncing

防抖确保了一个函数只有在一个固定时间段内没有被调用过后,才会再次被调用。可以这样形容:比如说只有在 1 毫秒过后,才允许执行这个函数。

Debouncing enforces that a function not be called again until a certain amount of time has passed without it being called. As in "execute this function only if 100 milliseconds have passed without it being called."

再换句话说:

防抖会等待事件不再高频发生,再触发。

//fn 要执行的函数//delay 计划好的等待时间//返回一个函数function debounced(delay, fn) {  let timerId;  return function (...args) {    if (timerId) {//如果正在一个timeout中      clearTimeout(timerId);//中断timeout,不会发生setTimeout的回调函数    }    timerId = setTimeout(() => {//开始新的timeout      fn(...args);      timerId = null;    }, delay);  }}

结论

节流在我们不关心函数参数是什么的时候比较有用,比如鼠标移动,滚轮事件,我们在乎的是操作的频率。

防抖在我们关心高频事件发生过后,得到的那个结果的时候,比较有用,比如用户迅速输入完一串用户名,对其进行查重的结果。

这个 很好的可视化了节流与防抖。

参考信息

转载地址:http://skupx.baihongyu.com/

你可能感兴趣的文章
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
更改UIView的背景
查看>>
JLNotebookView
查看>>
StackPanel
查看>>
SPUserResizableView
查看>>
UML类图示例
查看>>
sh ./ 执行区别
查看>>
宏定义(#ifndef+#define+#endif)的作用
查看>>
Prometheus安装部署以及配置
查看>>
taobao-pamirs-schedule-2.0源码分析——类设计
查看>>
10位程序员眼中的2007:寻找软件开…
查看>>