• 事件节流函数封装层


     以下场景往往由于事件频繁被触发,因而频繁执行DOM操作、资源加载等重行为,导致UI停顿甚至浏览器崩溃。

      1. window对象的resize、scroll事件

      2. 拖拽时的mousemove事件

      3. 射击游戏中的mousedown、keydown事件

      4. 文字输入、自动完成的keyup事件

      实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理;而其他事件大多的需求是以一定的频率执行后续处理。针对这两种需求就出现了debounce和throttle两种解决办法。

    二、什么是debounce                            

       1. 定义

      如果用手指一直按住一个弹簧,它将不会弹起直到你松手为止。

          也就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间。

       接口定义

    1 /**
    2 * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 idle,action 才会执行
    3 * @param idle   {number}    空闲时间,单位毫秒
    4 * @param action {function}  请求关联函数,实际应用需要调用的函数
    5 * @return {function}    返回客户调用函数
    6 */
    7 debounce(idle,action)

    2.简单实现

     1 var debounce = function(idle, action){
     2   var last
     3   return function(){
     4     var ctx = this, args = arguments
     5     clearTimeout(last)
     6     last = setTimeout(function(){
     7         action.apply(ctx, args)
     8     }, idle)
     9   }
    10 }

    三、什么是throttle                              

       1. 定义

      如果将水龙头拧紧直到水是以水滴的形式流出,那你会发现每隔一段时间,就会有一滴水流出。

      也就是会说预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。

          接口定义:

    1 /**
    2 * 频率控制 返回函数连续调用时,action 执行频率限定为 次 / delay
    3 * @param delay  {number}    延迟时间,单位毫秒
    4 * @param action {function}  请求关联函数,实际应用需要调用的函数
    5 * @return {function}    返回客户调用函数
    6 */
    7 throttle(delay,action)

       2. 简单实现

     1 var throttle = function(delay, action){
     2   var last = 0;
     3     return function(){
     4     var curr = +new Date()
     5     if (curr - last > delay){
     6       action.apply(this, arguments)
     7       last = curr 
     8     }
     9   }
    10 }    

    http://www.cnblogs.com/fsjohnhuang/p/4147810.html

    http://www.cnblogs.com/dolphinX/p/3403821.html

    http://www.admin10000.com/document/1124.html

    【前端性能】高性能滚动 scroll 及页面渲染优化

    坚持下去就能成功
  • 相关阅读:
    普通函数跟箭头函数中this的指向问题
    vue之router学习笔记
    vue之登录和token处理
    vue之router钩子函数
    eslint----standard 代码规范
    vscode----配置vue开发环境
    vue----安装教程
    vue----全局组件,局部组件
    vue----常用实例方法--$mount(),$destroy(),$watch(),$forceUpdate()
    vue----生命周期
  • 原文地址:https://www.cnblogs.com/suoking/p/5481808.html
Copyright © 2020-2023  润新知