uView throttle & debounce节流防抖

简介: uView throttle & debounce节流防抖
何谓节流和防抖?
  • 节流
    节流的意思是,规定时间内,只触发一次。比如我们设定500ms,在这个时间内,无论点击按钮多少次,它都只会触发一次。具体场景可以是抢购时候,由于有无数人 快速点击按钮,如果每次点击都发送请求,就会给服务器造成巨大的压力,但是我们进行节流后,就会大大减少请求的次数。
  • 防抖
    防抖的意思是,在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效。具体场景可以搜索框输入关键字过程中实时 请求服务器匹配搜索结果,如果不进行处理,那么就是输入框内容一直变化,导致一直发送请求。如果进行防抖处理,结果就是当我们输入内容完成后,一定时间(比如500ms)没有再 输入内容,这时再触发请求。

结合以上两种情况,回到我们最实际的场景,比如防止表单提交按钮被多次触发,我们应该选择使用节流而不是防抖方案。

温馨提示

uView内置的按钮组件u-button内部已做节流处理(1.5.8版本),无需外部再做节流处理。配置throttle-time参数,可以设置节流的时间,详见Button 按钮

#节流

#throttle(func, wait = 500, immediate = true)

规定时间内,只触发一次,可以通过设置immediate来决定触发的时机在这个时间的开始,还是结束的时候执行。

  • func <Function> 触发回调执行的函数
  • wait <Number> 时间间隔,单位ms
  • immediate <Boolean> 在开始还是结束处触发,比如设置wait为1000ms,如果在一秒内进行了5次操作,只触发一次,如果immediatetrue,那么就会在第一次操作 触发回调,如果为false,就会在第5次操作触发回调。
<template>
    <view class="">
    <!-- 此处用法为在模板中使用,无需写this,直接$u.throttle()即可 -->
      <view class="throttle" @tap="$u.throttle(btnAClick, 500)">
        露从今夜白
      </view>
      <view class="throttle" @tap="btnBClick">
        月是故乡明
      </view>
    </view>
</template>
<script>
    export default {
        methods: {
            btnAClick() {
        console.log('btnClick');
      },
      btnBClick() {
        // 此处用法为在js中调用,需要写uni.$u.throttle()
        uni.$u.throttle(this.toNext, 500)
      },
      toNext() {
        console.log('btnBClick');
      }
        }
    }
</script>
<style lang="scss">
    .throttle {
    margin-top: 50rpx;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100rpx;
    border: 1px solid $u-type-primary;
  }
</style>

copy

#防抖

#debounce(func, wait = 500, immediate = false)

在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效

  • func <Function> 触发回调执行的函数
  • wait <Number> 时间间隔,单位ms
  • immediate <Number> 在开始还是结束处触发,如非特殊情况,一般默认为false即可
<template>
    <view class="">
    <!-- 此处用法为在模板中使用,无需写this,直接$u.debounce()即可 -->
      <view class="debounce" @tap="$u.debounce(btnAClick, 500)">
        露从今夜白
      </view>
      <view class="debounce" @tap="btnBClick">
        月是故乡明
      </view>
    </view>
</template>
<script>
    export default {
        methods: {
            btnAClick() {
        console.log('btnClick');
      },
      btnBClick() {
        // 此处用法为在js中调用,需要写uni.$u.debounce()
        uni.$u.debounce(this.toNext, 500)
      },
      toNext() {
        console.log('btnBClick');
      }
        }
    }
</script>
<style lang="scss">
    .debounce {
    margin-top: 50rpx;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100rpx;
    border: 1px solid $u-type-primary;
  }
</style>
相关文章
|
资源调度 前端开发
vue3.2最新语法如何使用socket.io实现即时通讯
vue3.2最新语法如何使用socket.io实现即时通讯
362 3
|
移动开发 小程序 测试技术
自定义多级联动选择器指南(uni-app)
在本文中,探讨了如何在uni-app中创建自定义多级联动选择器组件。这个组件具有强大的多端支持,可适用于H5、APP、微信小程序、支付宝小程序等多种平台。
1394 1
自定义多级联动选择器指南(uni-app)
|
9月前
|
存储 缓存 数据可视化
HarmonyOS5云服务技术分享--云存储指南
本文详解HarmonyOS云存储实战技巧,涵盖文件上传、下载、元数据操作及删除等核心功能。通过简单易懂的示例代码,助你快速上手。云存储支持自动同步、精细权限管理与海量存储,适合处理用户头像、游戏存档等场景。文中还提供避坑指南、进阶技巧和最佳实践,帮助开发者高效利用云存储功能,减少开发障碍。附完整代码示例,欢迎交流!
|
移动开发 JavaScript 小程序
uView Tooltip 长按提示
uView Tooltip 长按提示
593 3
|
数据采集 自然语言处理 NoSQL
Qwen for Tugraph:自然语言至图查询语言翻译大模型微调最佳实践
在图数据库的应用场景中,自然语言至图查询语言的高效转换一直是行业中的重要挑战。本次实践基于阿里云 Qwen 大模型,围绕 TuGraph 图数据库的需求,探索并验证了一套高效的大模型微调方案,显著提升了模型生成 Cypher 查询语句的能力。通过数据清洗、两阶段微调方法以及两模型推理框架等一系列创新策略,我们成功解决了图查询语言翻译任务中的核心问题。本文将从背景与目标、数据准备与清洗、微调框架设计、Prompt设计与优化、模型推理、最佳实践效果以及前景展望等六个部分出发,向读者逐步介绍我们的方案。
|
移动开发 资源调度 JavaScript
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
这篇文章介绍了在Vue移动端网页中使用`pdfh5`和`vue-pdf`两个插件来实现PDF文件的预览,包括滚动查看、缩放、添加水印、分页加载、跳转指定页数等功能。
10203 1
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
|
前端开发 小程序
uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
1792 0
|
小程序 开发者
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
1454 0
|
JavaScript 定位技术 API
在 vue3 中使用高德地图
在 vue3 中使用高德地图
2804 0
|
Java Apache
通过Apache PDFBox将pdf与图片互相转换以及合并与拆分pdf
通过Apache PDFBox将pdf与图片互相转换以及合并与拆分pdf
1730 0

热门文章

最新文章