• 再起航,我的学习笔记之JavaScript设计模式29(节流模式)


    节流模式

    概念介绍

    节流模式(Throttler): 对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能。

    优化滚动事件

    有的时候我们再为滚动条添加动画的时候,会发现滚动条不停的抖动,那么为什么会发生这种事情呢?我们简单的写个例子演示下
    首先我们需要给页面一定的高度让其产生滚动条,然后我们监听页面在滚动的时候发生了什么。

    首先我们编写个简单的方法在调用的时候像控制台输出,接着,我们调用滚动条的滚动事件,看看控制台里发生了什么

    function scrollFn(){
        console.log(1)
    }
    window.onscroll=function(){
        scrollFn()
    }
    

    我们看到在我们滚动的时候控制台不停的在输出,我们的事件触发了很多次所以,在我们触发某些效果的时候会发生抖动等问题。那么我们如何解决这个问题呢?这个时候我们就可以用到节流模式。

    首先我们需要创建一个节流器

    //节流器
    var throttle=function(){
        //获取第一个参数
    	var clearParam=arguments[0],methods;
    	//如果第一个参数是布尔类型那么第一个参数怎表示是否清除计时器
    	if (typeof clearParam==='boolean') {
    	    //第二个参数为函数
    	    methods=arguments[1];
    		//如果函数的计时器存在,则清除计时器
        	methods.throttleTimeId&&clearTimeout(methods.throttleTimeId);
    	}else{
    	
    	    //如果第一个参数为函数
    		methods=clearParam;
    		//第二个参数为函数执行时的参数
    		param=arguments[1];
    		//清除执行函数计时器
    		arguments.callee(true,methods);
    		//为函数绑定计时器,延迟执行
    		methods.throttleTimeId=setTimeout(function(){
    		    //执行函数
    			methods(param);
    		},300)
    	}
    }
    

    好了我们现在调用试试

    window.onscroll=function(){
        throttle(scrollFn)
    }
    

    好了我们现在看到,触发的事件是不是少了很多,这样我们就达到了节流的目的。

    总结

    由于JavaScript的单线程处理机制,导致Dom操作占用大量资源时会严重堵塞后面总要程序的执行,而我们的节流模式,则可以为我们优化这种情况,节流模式的核心思想是创建计时器,延迟程序的执行。
    节流模式的有以下优点
    1.程序能否执行时可控的。执行的某一时刻是否清除计时器来决定程序是否继续执行。
    2.程序是异步的。由于计时器机制,使得程序脱离原程序而异步执行,因此不会影响后面的程序的正常执行。

    也谢谢大家看到这里:)如果你觉得我的分享还可以请点击推荐,分享给你的朋友让我们一起进步~

    好了以上就是本次分享的全部内容,本次示例参考自JavaScript设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

    欢迎转载,转载请注明作者,原文出处。

  • 相关阅读:
    【转载】 学习《强化学习的落地实践》有感
    如何使用工具下载B站非会员视频(下载B站免费web视频)
    强化学习、分布式计算方向的phd毕业后去企业的要求
    【转载】 自然梯度法(Natural Gradient)
    【转载】 费舍尔信息矩阵及自然梯度法
    【转载】 梯度的直观理解_谈谈优化算法之一(动量法、Nesterov法、自然梯度法)
    第二章 描述万维网的资源-RDF
    第一章 语义网的愿景
    知识工程及语义网技术 2020-04-09 (第二节)-基于本体的知识管理
    RDF:知识图谱里的知识表示
  • 原文地址:https://www.cnblogs.com/chen-jie/p/JavaScript-Throttler.html
Copyright © 2020-2023  润新知