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

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

在实际开发中,我们经常会遇到一类需求:根据input输入容来校验或者搜索数据,根据窗口的大小变化来进行相关操作等。如果事件操作函数跟用户的操作保持实时同步,那么当用户的操作十分频繁时,就会多出许多无用的事件操作,并加重浏览器的负担,影响页面的性能。这时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果。

防抖

函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。可能比较抽象,这里写个简易的防抖函数:

// 函数防抖function debounce (fn, wait) {    var tiemout = null;    return function () {        if (tiemout !== null) {            clearTimeout(tiemout);        }        tiemout = setTimeout(fn, wait);    }}// 事件处理函数function print() {    console.log('变化');}window.addEventListener('resize', debounce(print, 1000));复制代码

页面监听resize事件,当事件频繁触发时,事件处理函数并没有执行。当事件停止触发后的1秒,执行print函数。

节流

函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数。就好比人的眨眼睛,就是一定时间内眨一次。这是函数节流最形象的解释。实现函数节流主要有两种方式:时间戳与定时器。这里两种方式都简单写一下,其实原理是相同的:

// 函数防抖(时间戳)function throttleOne (fn, delay) {    var preDate = Date.now();    return function () {        var now = Date.now();        if (now - preDate >= delay) {            fn();            preDate = Date.now();        }    }}// 函数防抖(定时器)function throttleTwo (fn, delay) {    var tiemout = null;    return function () {        if (!tiemout) {            tiemout = setTimeout(function () {                fn();                tiemout = null;            }, delay);        }    }}复制代码

上面的写的方法都比较简易,只是实现了基本的功能,实际开发中需根据要求进行相关的更改。匆匆的总结了一波,写的很简单(懒),有时间再补充吧0.0

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

你可能感兴趣的文章
GregorianCalendar日历程序
查看>>
Sublime 中运行 Shell 、Python、Lua、Groovy...等各种脚本
查看>>
【Java集合源码剖析】ArrayList源码剖析
查看>>
linux的目录结构
查看>>
这次逻辑通了,
查看>>
HTMLHelper
查看>>
快速构建Windows 8风格应用29-捕获图片与视频
查看>>
java程序:set改造成map
查看>>
C++ 排序函数 sort(),qsort()的使用方法
查看>>
OC语言Block和协议
查看>>
使用xpath时出现noDefClass的错误(找不到某个类)
查看>>
OutputCache祥解
查看>>
【推荐】最新国外免费空间网站Hostinger
查看>>
.Net规则引擎介绍 - REngine
查看>>
微信消息回复C#
查看>>
JVM学习03_new对象的内存图讲解,以及引出static方法(转)
查看>>
I深搜
查看>>
c++面向对象的编程
查看>>
ArcMap概化之消除真曲线
查看>>
[禅悟人生]谦虚有助于自我消融
查看>>