美文网首页
js性能优化-节流、防抖

js性能优化-节流、防抖

作者: MISS_3ca2 | 来源:发表于2020-08-09 11:04 被阅读0次

节流

节流就是优化高频率执行js代码的一种手段 例如大家熟悉的搜索引擎的联想搜索功能、鼠标不断点击触发,mousedown(单位时间内只触发一次)、window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
保证一定时间内,核心代码只执行一次
function throttle(fn,delay){
   let canRun = true;
   return function(){
        if(!canRun){
            return;
        }
        canRun = false;
        setTimeout(function(){
            fn.apply(this,arguments)
                canRun = true;
            },delay)
        }
  }
  function showTop(){
           console.log('滚动')
  }
  window.onscroll = throttle(showTop,1000)

防抖

防抖 在第一次触发事件时不立即执行函数,而是给出一个期限值 例如200ms
如果200ms内没有再次触发事件,那么就执行函数
如果200ms内再次触发事件,那么当前的计时取消,重新开始计时
效果: 如果同一时间内大量触发同一事件,只会执行一次函数,例如search搜索联想,用户在不断输入值时,用防抖来节约请求资源。】
<input placeholder="输入" oninput="change()"/>
function debounce(fn,delay){
                var timer = null;
                return function(){
                    if(timer){
                        clearTimeout(timer);//进入该语句,说明当前正在一个计时过程中,并且触发了相同的事件,所以取消当前计时,重新开始计时
                    } 
                    timer = setTimeout(fn,delay)
                }
            }
            let searchfn = debounce(getchange,1000)
            function getchange(){
                console.log('输入框值改变了')
            }
             
            function change(){
                searchfn();
            }

相关文章

网友评论

      本文标题:js性能优化-节流、防抖

      本文链接:https://www.haomeiwen.com/subject/xlhtdktx.html