博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数防抖和函数节流
阅读量:4070 次
发布时间:2019-05-25

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

在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等,但有些时候我们并不希望在事件持续触发的过程中那么频繁地去执行函数。通常这种情况下我们会使用防抖和节流去解决。

使用节流防抖函数(性能优化)

壹、在 vue 中如何使用:

1、在公共方法中(如 untils.js 中),加入函数防抖和节流方法

// 防抖export function _debounce(fn, delay) {    var delay = delay || 200;    var timer;    return function () {        var th = this;        var args = arguments;        if (timer) {            clearTimeout(timer);        }        timer = setTimeout(function () {            timer = null;            fn.apply(th, args);        }, delay);    };}// 节流export function _throttle(fn, interval) {    var last;    var timer;    var interval = interval || 200;    return function () {        var th = this;        var args = arguments;        var now = +new Date();        if (last && now - last < interval) {            clearTimeout(timer);            timer = setTimeout(function () {                last = now;                fn.apply(th, args);            }, interval);        } else {            last = now;            fn.apply(th, args);        }    }}

2、在需要使用的组件引用

import { _debounce } from "@/utils/public";

3、在 methods 中使用

methods: {    // 改变场数    changefield: _debounce(function(_type, index, item) {        // do something ...    }, 200)  }

贰、应用:

1、函数防抖(debounce)

就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

      

看一下运行结果:

可以看到,我们只要输入一个字符,就会触发这次ajax请求。不仅从资源上来说是很浪费的行为,而且实际应用中,用户也是输出完整的字符后,才会请求。下面我们优化一下:

      

 

我们加入了防抖以后,当你在频繁的输入时,并不会发送请求,只有当你在指定间隔内没有输入时,才会执行函数。如果停止输入但是在指定间隔内又输入,会重新触发计时。

个人理解 函数防抖就是法师发技能的时候要读条,技能读条没完再按技能就会重新读条。

2、函数节流(throttle)

规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

      

不管我们设定的执行时间间隔多小,总是1s内只执行一次。

个人理解 函数节流就是fps游戏的射速,就算一直按着鼠标射击,也只会在规定射速内射出子弹。

叁、总结:

函数防抖和函数节流都是防止某一时间频繁触发,但是这两兄弟之间的原理却不一样。

函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。

肆、结合应用场景:

①、debounce:

search搜索联想,用户在不断输入值时,用防抖来节约请求资源。

window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

②、throttle:

鼠标不断点击触发,mousedown(单位时间内只触发一次)

拖拽事件,每拖动1px都会触发onmousemove(可以用throttle优化,每秒触发一次)
监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

 

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

你可能感兴趣的文章
大数据入门:Scala函数式编程
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>
C++类、结构体、函数、变量等命名规则详解
查看>>
C++ goto语句详解
查看>>
【数据结构周周练】008 二叉树的链式创建及测试
查看>>
《软件体系结构》 第九章 软件体系结构评估
查看>>
《软件体系结构》 第十章 软件产品线体系结构
查看>>
《软件过程管理》 第六章 软件过程的项目管理
查看>>
《软件过程管理》 第九章 软件过程的评估和改进
查看>>
《软件过程管理》 第八章 软件过程集成管理
查看>>
分治法 动态规划法 贪心法 回溯法 小结
查看>>
《软件体系结构》 练习题
查看>>
《数据库系统概论》 第一章 绪论
查看>>
《数据库系统概论》 第二章 关系数据库
查看>>
《数据库系统概论》 第三章 关系数据库标准语言SQL
查看>>
SQL语句(二)查询语句
查看>>
SQL语句(六) 自主存取控制
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>