zoukankan      html  css  js  c++  java
  • JS防抖与节流(性能优化)

    声明:不是原创,只是自己记录,关注vue社区公众号吧;

    防抖:动作停止后的时间超过设定的时间时执行一次函数。注意:这里的动作停止表示你停止了触发这个函数,从这个时间点开始计算,当间隔时间等于你设定时间,才会执行里面的回调函数。如果你一直在触发这个函数并且两次触发间隔小于设定时间,则函数一直不会执行。

    简单实现:
     1 function debance(fn, delay) {
     2   let timer = null;
     3   return () => {
     4     if (timer) {
     5       clearTimeout(timer);
     6     }
     7     timer = setTimeout(() => {
     8       fn();
     9     }, delay);
    10   };
    11 }
    12 
    13 window.addEventListener(
    14   "scroll",
    15   debance(() => {
    16     console.log(111);
    17   }, 1000)
    18 );
    防抖应用场景:
    1. search搜索联想,用户在不断输入值时,用防抖来节约请求资源
    2.window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

    节流:一定时间内执行的操作只执行一次,也就是说即预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。

    简单实现:

     1 //方法一:设置一个标志
     2     function throttle(fn, delay) {
     3       let flag = true;
     4       return () => {
     5         if (!flag) return;
     6         flag = false;
     7         timer = setTimeout(() => {
     8           fn();
     9           flag = true;
    10         }, delay);
    11       };
    12     }
    13     //方法二:使用时间戳
    14   function throttle(fn, delay) {
    15       let startTime=new Date()
    16       return () => {
    17         let endTime=new Date()
    18         if (endTime-startTime>=delay){
    19           fn()
    20           startTime=endTime
    21         }else{
    22           return
    23         }
    24       };
    25     }
    26     window.addEventListener(
    27       "scroll",
    28       throttle(() => {
    29         console.log(111);
    30       }, 1000)
    31     );
    节流应用场景:
    1. 鼠标不断点击触发,mousedown(单位时间内只触发一次)
    2. 监听滚动事件,比如是否滑到底部自动加载更多(懒加载),用throttle来判断
    小凤凰newObject
  • 相关阅读:
    C# Enum转换
    Split
    WCF访问安全
    [转] 检索 COM 类工厂中 CLSID 为 {000209FF00000000C000000000000046} 的组件时失败
    ICSharpCode.SharpZipLib.dll压缩的zip包,7zip解压时出错
    js控制ctrl+p
    跨域访问WCF问题
    sql:过滤字段中是否包含数字
    序列化/反序化
    [转]RegistryKey 操作注册表
  • 原文地址:https://www.cnblogs.com/xiaofenghuang/p/13044509.html
Copyright © 2011-2022 走看看