博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数throttle、debounce介绍
阅读量:6159 次
发布时间:2019-06-21

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

  • 背景:如监听窗口大小的改变、滚动,因为我们稍微改变一下窗口大小、鼠标滚轮稍微滚动一下,就可以调用几十次函数,事件在队列里排队等待执行,而js是单线程的,这样会阻碍其他事件的执行、造成卡顿、假死、用户体验差等问题,这就需要用到throttle、debounce来减少函数的执行次数
  1. 节流,减少事件的执行次数,
// 简易版const throttle = (func, limit) => {  let inThrottle  return function() {    const args = arguments    const context = this    if (!inThrottle) {      func.apply(context, args)      inThrottle = true      setTimeout(() => inThrottle = false, limit)    }  }}// 可以获得最后一次的执行const throttle = (func, limit) => {  let lastFunc  let lastRan  return function() {    const context = this    const args = arguments    if (!lastRan) {      func.apply(context, args)      lastRan = Date.now()    } else {      clearTimeout(lastFunc)      lastFunc = setTimeout(function() {        if ((Date.now() - lastRan) >= limit) {          func.apply(context, args)          lastRan = Date.now()        }      }, limit - (Date.now() - lastRan))    }  }}复制代码

2.函数防抖

const debounce = (func, delay) => {  let inDebounce  return function() {    const context = this    const args = arguments    clearTimeout(inDebounce)    inDebounce = setTimeout(() => func.apply(context, args), delay)  }}复制代码

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

你可能感兴趣的文章
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>
闲说HeartBeat心跳包和TCP协议的KeepAlive机制
查看>>
MoSQL
查看>>
Hibernate多对一外键单向关联(Annotation配置)
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
设计模式:组合模式(Composite Pattern)
查看>>
ContentValues 和HashTable区别
查看>>
LogicalDOC 6.6.2 发布,文档管理系统
查看>>
给PowerShell脚本传递参数
查看>>
实战2——Hadoop的日志分析
查看>>
利用FIFO进行文件拷贝一例
查看>>
Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
查看>>
resmgr:cpu quantum等待事件
查看>>
一个屌丝程序猿的人生(六十六)
查看>>
Java 编码 UTF-8
查看>>
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>