JS:性能优化方案:lodash防抖debounce和节流throttle

简介: JS:性能优化方案:lodash防抖debounce和节流throttle

1、防抖函数

防抖用于减少

数请求次数,对于频繁的请求,只执行这些请求的最后一次。

/**
 * @param {function} func - 执行函数
 * @param {number} wait - 等待时间
 * @return {function}
 */
function debounce(func, wait = 300){
  let timer = null;
  return function(){
    if(timer !== null){
      clearTimeout(timer);
    }
    timer = setTimeout(func.bind(this),wait);
  }
}

应用示例

let scrollHandler = debounce(function(e){
  console.log('scroll')
}, 500)
window.onscroll = scrollHandler

2、节流函数

节流用于减少函数请求次数,与防抖不同,节流是在一段时间执行一次。

/**
 * @param {function} func - 执行函数
 * @param {number} delay - 延迟时间
 * @return {function}
 */
function throttle(func, delay){
  let timer = null
  return function(...arg){
    if(!timer){
      timer = setTimeout(()=>{
        func.apply(this, arg)
        timer = null
      }, delay)
    }
  }
}

使用示例

let scrollHandler = throttle(function(e){
  console.log(e)
}, 500)
window.onscroll = scrollHandler

Vue与lodash

安装

npm i --save lodash

使用方法

// 写法一:
methods: {
    // 注意function 不能省略
  debounceSubmit: debounce(function() {
    this.submit();
  }, 500)
},
// 写法二:
created(){
  this.debounceSubmit = debounce(this.submit, 500);
}

参考

10个非常实用的JS工具函数

vue , debounce 使用

相关文章
lodash函数节流
lodash函数节流
657 0
|
前端开发
Layui 内置方法 - layer.load(加载层)
Layui 内置方法 - layer.load(加载层)
2532 0
|
4月前
|
前端开发
Promise.all()方法和Promise.race()方法有什么区别?
Promise.all()方法和Promise.race()方法有什么区别?
424 115
|
10月前
|
人工智能 JavaScript 前端开发
通义灵码极好
通义灵码是阿里云推出的一款AI编程助手,基于大模型技术,支持多种编程语言,提供智能代码补全、优化建议、Bug诊断等功能,显著提升编码效率和代码质量。本文详细评测其核心功能,对比GitHub Copilot,并推荐给国内开发者及阿里云生态用户。评分:4.5/5。
813 1
通义灵码极好
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
2881 1
|
JavaScript 前端开发
load、$(document).ready、DOMContentLoaded的区别
load、$(document).ready、DOMContentLoaded的区别
381 3
|
JavaScript
【Js】检查Date对象是否为Invalid Date
【Js】检查Date对象是否为Invalid Date
493 0
|
JavaScript
vue 全局响应键盘按键/监听键盘事件(含 js 获取键盘keyCode值的方法)
vue 全局响应键盘按键/监听键盘事件(含 js 获取键盘keyCode值的方法)
1059 2
|
JavaScript
JS数组reduce()方法详解及高级技巧
JS数组reduce()方法详解及高级技巧
350 1
|
JavaScript 前端开发
Javascript的一些监听事件
Javascript的一些监听事件
257 2