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

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

在浏览器dom事件里面,一些事件会随着用户的操作不间断的触发,比如:为一个元素绑定拖拽事件,为页面绑定resize事件(重新调整浏览器窗口大小),页面滚动。如果dom操作比较复杂,还不间断的触发事件。这将会造成性能上的损失,导致浏览器卡顿,用户体验下降。

所以针对此类事件则需要进行节流,或者防抖动处理。

一、节流-throttle

在指定时间内,让函数只触发一次。

规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间,触发了多次的回调函数,那也只有一次能生效,其余的作废。

举例:

假设,我们观察的总时间为10秒钟,规定1秒作为一次事件的最小间隔时间。

如果触发事件的频率是 0.5s/次

因为控制了最多一秒一次,频率为0.5s/次,所以每一秒钟就有一次事件作废。最终控制成1s/次

实现:

第一种:采用loadsh库的_.throttle()函数第二种:滑动为例,,我们滚动页面时,为使用节流函数之前,频繁触发了多次的函数调用,函数调用中涉及到了dom操作或者接口请求的话,那将会进行无数次的函数调用。采用之后,时间间隔内(这里设置300ms)多次触发了函数,只执行了一次。    节流        

二、防抖-debounce

对于一定
时间段内的
连续的函数调用,只执行一次

原理:其实就是一个定时器,当我们触发一个事件时,setTimeout让这个事件延迟一会在执行。如果在这个时间段内又触发了这个事件。那么我们就先clear掉这个定时器,在重新setTimeout一个新定时器来延迟执行。

多次调用之执行一次:

同样这边的例子是

假设,我们观察的总时间为10秒钟,规定1秒作为一次事件的最小间隔时间。

如果触发事件的频率是 0.5s/次

因为始终没法等一秒钟就被再次触发了,所以最终没有一次事件是成功的。

实现:

第一种:采用loadsh库的_.debounce()函数第二种:滑动为例,,我们滚动页面时,为使用防抖函数之前,频繁触发了多次的函数调用,函数调用中涉及到了dom操作或者接口请求的话,那将会进行无数次的函数调用。采用防抖之后,只有在停止滑动后,定时结束才执行函数处理逻辑。    防抖        

三、区别

节流:不管事件触发的多频繁,都会保证在规定的时间内一定会执行一次真正的事件处理函数。

防抖:只在最后一次触发事件后才执行一次函数

参考:

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

你可能感兴趣的文章
用python训练机器学习
查看>>
jmeter录制脚本
查看>>
算法笔记--Splay && Link-Cut-Tree
查看>>
tp框架做留言板
查看>>
Vue中computed,methods,watch用法上的异同
查看>>
浮点数相比较
查看>>
单元测试系列之五:Mock工具之Mockito实战
查看>>
JMETER 不同线程组 变量值 的参数传递(转)
查看>>
打印菱形
查看>>
数据库进阶之路(五) - MySQL行锁深入研究
查看>>
后缀数组 --- WOj 1564 Problem 1564 - A - Circle
查看>>
day28 property 装饰器
查看>>
TOMCAT服务器配置域名
查看>>
appium python实例脚本1
查看>>
jQuery中的.bind()、.live()和.delegate()之间区别分析
查看>>
107:JsonResponse用法详解
查看>>
Android源码学习之浅析SystemServer脉络
查看>>
supersock问题
查看>>
IIS设置允许下载.exe文件的解决方法(转自:http://hi.baidu.com/greenyork/blog/item/81da2a001d2175091d958319.html)...
查看>>
Java基础 - 数组
查看>>