微信小程序:函数节流与函数防抖

目录

问题引入:

定义

解决方案:函数节流

一、案例举例

1.页面展示

2.search.wxml标签展示

3.search.js展示

4.结果展示

二、函数节流解决问题

1.函数

2.实例应用

三、函数防抖解决问题

1.函数

2.原理

3.应用场景

4.应用实例

总结


问题引入:

在搜索框中,程序短时间内大量触发某函数而导致的性能下降。

定义

  • 节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
  • 防抖: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时

解决方案:函数节流

  • 函数节流: 频繁触发,但只在特定的时间内才执行一次代码
  • 函数防抖: 频繁触发,但只在特定的时间内没有触发执行条件才执行一次代码

一、案例举例

1.页面展示

2.search.wxml标签展示

html 复制代码
<input type="text"  bindinput="handleInputChange" />

3.search.js展示

javascript 复制代码
handleInputChange(event){
    console.log(event.detail.value)
}

4.结果展示

二、函数节流解决问题

1.函数

javascript 复制代码
setTimeout(() => {
   
}, 300);

2.实例应用

javascript 复制代码
//全局变量
let isSend = false;
// input 输入框
handleInputChange(event) {
    console.log(event.detail.value)
    this.setData({
      searchContent: event.detail.value.trim()
    });
    // 函数节流 防抖
    if (isSend) {
      return
    }
    isSend = true
    this.getSearchList()
    setTimeout(async () => {
      isSend = false
    }, 300);
  },
//请求方法
async getSearchList() {
    let searchListData = await request('/search', { keywords: this.data.searchContent, limit: 10 })
    this.setData({
      searchList: searchListData.result.songs
    })
  },

三、函数防抖解决问题

1.函数

javascript 复制代码
debounce: function (func, wait) {
    
    return () => {

      clearTimeout(timer);

      timer = setTimeout(func, wait);

    };

};
func:需要防抖的函数;
wait:number类型,setTimeout的时间参数;

2.原理

防抖的原理就是:你尽管触发事件,但是我一定在事件触发n秒无操作后才执行

3.应用场景

  • 表单验证
  • 搜索框输入查询
  • 滚动条滚动
  • 按键提交

4.应用实例

javascript 复制代码
function debounce(fn, interval) {
    let timer;
    let delay = interval || 500; // 间隔的时间,如果interval不传,则默认1秒
    return function () {
        let that = this;
        let args = arguments; // 保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(function () {
            fn.apply(that, args); // 用apply指向调用debounce的对象,相当于this.fn(args);
        }, delay);
    };
}

总结

  • 函数节流与函数防抖节约计算机资源,提升用户体验
  • 节流一般是用在必须执行这个动作,但是不能够执行太频繁的情况下
  • 防抖一般是用来,用户输入有操作时,暂时不执行动作,等待没有新操作时,进行相应响应
  • 函数防抖与节流都可以解决频繁使用计算机资源的问题
相关推荐
FungLeo7 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn8 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_8 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt8 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide9 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel9 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘11 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马11 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut11 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12311 小时前
实现完整 Tool Dispatcher
开发语言·前端