0
点赞
收藏
分享

微信扫一扫

【JavaScript】- 什么是函数节流

IT影子 2022-03-25 阅读 63

一、什么是函数节流(throttle)

概念:限制一个函数在一定时间内只能执行一次。

二、为什么需要函数节流

  前端开发过程中,有一些事件或者函数,会被频繁地触发(短时间按内多次触发),最常见的例如,onresizescrollmousemove ,mousehover 等,这些事件的触发频率很高,不做限制的话,有可能一秒之内执行几十次、几百次,如果在这些函数内部执行了其他函数,尤其是执行了操作 DOM 的函数(浏览器操作 DOM 是很耗费性能的),那不仅会造成计算机资源的浪费,还会降低程序运行速度,甚至造成浏览器卡死、崩溃。这种问题显然是致命的。

三、函数节流如何解决上述问题

根据上面对问题的分析,细细思索,问题的解决方案就呼之欲出了。

四、函数节流的代码实现

根据以上分析,我们对“函数节流”进行代码实现,如下:

(1)方法一:时间戳方案

// 时间戳方案
function throttle(fn,wait){
    var pre = Date.now();
    return function(){
        var context = this;
        var args = arguments;
        var now = Date.now();
        if( now - pre >= wait){
            fn.apply(context,args);
            pre = Date.now();
        }
    }
}
 
function handle(){
    console.log(Math.random());
}
    
window.addEventListener("mousemove",throttle(handle,1000));

(2)方法二:定时器方案

// 定时器方案
function throttle(fn,wait){
    var timer = null;
    return function(){
        var context = this;
        var args = arguments;
        if(!timer){
            timer = setTimeout(function(){
                fn.apply(context,args);
                timer = null;
            },wait)
        }
    }
}
    
function handle(){
    console.log(Math.random());
}
    
window.addEventListener("mousemove",throttle(handle,1000));

五、函数节流的使用场景

到此为止,相信各位应该对函数节流有了一个比较详细的了解,那函数节流一般用在什么情况之下呢?

  1. 懒加载、滚动加载、加载更多或监听滚动条位置;
  2. 百度搜索框,搜索联想功能;
  3. 防止高频点击提交,防止表单重复提交;

目前遇到过的使用场景就是这些了,不过理解了原理,小伙伴可以把它运用在需要用到它的任何场合,提高代码质量。

总结

使用“函数节流”的主要目的,是为了优化程序性能,提高用户体验,不过最主要的为了节约计算机资源,推荐在合适的场合使用它,才能达到它应有的效果,切忌滥用哦!

举报

相关推荐

0 条评论