zoukankan      html  css  js  c++  java
  • 微信小程序节流的使用

    节流:在《高程》上定义,某些代码不可以在没有间断的情况连续重复执行。第一次调用函数,创建一个定时器,在指定的时间间隔之后运行代码。当第二次调用该函数时,它会清除前一次的定时器

               并设置另一个.

    节流的目的:只有在执行函数请求的一段时间之后才执行.

    我的理解:在规定时间内只触发一次.

    例子:滑动滚动条触发分页时,不可能时时刻刻只要一分页就触发ajax,这样对服务器很不友好.

    1.0版本节流:

     

        var processor = {
            timeoutId = null,
            //实际处理的代码
            performProcessing:function(){
              //写业务逻辑
            },
    
            //正在的节流重点
            process:function(){
                //清除上一个计时器,来阻止之前的调用被执行
               clearTimeout(timeoutId);
               //创建一个新的计时器调用
               this.timeoutId = setTimeout(()=>{
                   this.performProcessing();
               },100)
            },
        }
    
        processor.process()
        //表示100ms之内只执行了一次performProcessing()方法
        //即使100ms内 调用了50次process方法,performProcessing也只会执行一次
     
     
    2.0版本节流:(面试要求手写的节流基本都是这个)
     function throttle(method,context){ 
            clearTimeout(method.tId);
            method.tId = setTimeout(function(){
                //确保定时器在适当的环境中执行
               method.call(context)
            },100)
        }
    
        //method:要执行的函数  context:在哪个作用域上执行
     
    3.0版本节流:(有手就行 直接用)
        //我借鉴(偷了)了下掘金大佬的代码
        //本质上就是在规定时间差内 不能再触发,有种简单的方法就是根据Date来计算就好了,而不用到计时器
    const throttle = (fn,delay)=>{
            let oldDate = Date.now();
            return function(){
                let args = arguments;
                let newDate = Date.now();
                let that = this;
                if(newDate-oldDate>delay){
                    fn.apply(that,args);
                    //倘若时间差大于延长时间 就更新一次旧时间
                    oldDate = Date.now();
                }
            }
        }
    如何使用
                           在小程序的until.js或其他js文件上定义节流方法
                            

                           

     然后在需要使用的地方

                                     

     即可

    先知道怎么用,再去理解原理是什么。

    如果帮助了小伙伴们的话 点个赞哦~

  • 相关阅读:
    Linux系统格式化磁盘+挂载分区
    ELK日志处理
    memcached安装+绑定访问ip
    Redis安装+密码认证
    linux安全
    Mysql备份与恢复
    MySql binlog
    gitlab自动备份
    Rabbitmq安装与配置
    Hadoop实战-Flume之Source interceptor(十一)(2017-05-16 22:40)
  • 原文地址:https://www.cnblogs.com/feifei0928/p/13170581.html
Copyright © 2011-2022 走看看