节流防抖学习与实践
Posted gitbylegend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节流防抖学习与实践相关的知识,希望对你有一定的参考价值。
先看看概念
函数防抖(debounce):
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时;典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时。像是两个人的对话,A在不停的balabala(持续触发),如果他说话的时候有停顿(一定间隔),但是停顿的时间不够长,就认为A没有说完, 当停顿时间超过一某个范围就认为A说完了,然后B开始回答(响应)。
函数节流(throttle):
规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有第一次生效; 典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效。感觉像是去排队过安检,当人很多的时候(持续地要进门),安保会隔一段时间放进去几个进行安检(一定时间的间隔)。
场景
前提其实都是某个行为持续地触发,不同之处只要判断是要 优化到减少它的执行次数(throttle) 还是 只执行一次(debounce) 就行。
实现(Vue mixin用法)
//防抖 let _d_timer = null; Vue.prototype.$debounce = (cb, delay) => let that = this; if (!delay) delay = 1000; if (_d_timer) clearTimeout(_d_timer); _d_timer = setTimeout(function() cb(); _d_timer = null; , delay) //节流 let throttle_canRun=true; Vue.prototype.$throttle=(cb,delay)=> if(!throttle_canRun) return; if(!delay) delay=500; throttle_canRun=false; setTimeout(function() throttle_canRun=true; cb(); ,delay)
页面应用
onInput() this.$debounce(()=> uni.request( url: "https://vipshop.herokuapp.com/api/v1/product/", data: name: this.txt , success:(res)=> console.log(res) ) ); , throttleHandle() this.$throttle(function() console.log(111) )
以上是关于节流防抖学习与实践的主要内容,如果未能解决你的问题,请参考以下文章