■出售外链〓提升排名┿【QQ:1012189958】 车辆保险 交强险 二手车 广州二手车 网站建设 app开发 网站制作 一号站 捕鱼游戏 澳门百家乐 万达平台 1号站平台 1号站平台 1号站平台 1号站 1号站 一号站/a> 拉菲2 拉菲2 拉菲2 万达平台 万达娱乐 万达平台 万达平台 万达平台 万达平台 万达平台 万达平台 万达娱乐 东森平台 东森平台 东森娱乐 娱乐天地 娱乐天地 娱乐天地 金沙棋牌 捕鱼技巧 捕鱼技巧 捕鱼技巧 美高梅网址 牛牛 捕鱼 新葡京官网 真人百家乐 美高梅官网 美高梅官网 美高梅官网 新葡京官网 金沙网址 澳门美高梅官网 必赢彩票网 葡京赌场 葡京赌场 澳门新葡京 澳门新葡京 大发888 大发888 大发888 大发888 大发888 必赢国际 巴黎人娱乐城 博狗 澳门永利赌场 永利棋牌 永利棋牌 澳门新濠天地官网 澳门新濠天地官网 金蟾捕鱼 真钱牛牛 澳门新濠天地 捕鱼平台 捕鱼平台 365bet官网 真钱斗地主游戏 网上真钱扎金花 山西快乐十分 线上赌博平台 基金开户 帮考网 草根站长 拉菲娱乐 澳门百家乐 澳门百家乐 网贷帮 广州交通 球探比分 凤凰平台 澳门网上赌博 电玩box 港股 港股 A股行情 黄金价格 外汇开户 域名 金蟾捕鱼 1号站平台 888真人开户 888真人平台 一号站 pc蛋蛋信誉群 一号站 娱乐平台 拉菲娱乐平台 皇冠比分 新葡京 皇冠娱乐网 bt365娱乐官网 亿万先生 吉祥坊wellbet ca88亚洲城 千亿国际 龙8国际 亚虎国际 188bet ca88亚洲城 皇冠体育平台 现金娱乐平台 新葡京娱乐场 真钱21点 真钱21点 真钱牛牛 湖北11选5 真钱捕鱼 优德娱乐 申博 二八杠 最新全讯网 百家乐开户网 百家乐开户网 百家乐开户网 百家乐开户网 免费注册送彩金 博狗注册 皇冠备用 外围赌球 新2网址 888真人网址 澳门金沙 网上牌九 明升88 皇冠开户网 金鹰娱乐 现金炸金花 娱乐天地 娱乐天地 葡京酒店 真钱棋牌 体育开户 e世博官方网站 威尼斯人开户 澳门黄金城 澳门赌球 澳门游戏 真钱牛牛 二八杠玩法 二八杠技术 e世博注册 香港赌场 斗牛技巧 皇冠赌场线上娱乐 金沙娱乐 新葡京娱乐场 乐虎国际娱乐 棋牌 杏彩 澳门威尼斯人 澳门美高梅 伟德亚洲 bet365体育投注 威尼斯人 凤凰娱乐 凤凰娱乐 万达娱乐 拉菲娱乐 万达娱乐 万达娱乐 杏彩平台 凤凰平台 凤凰平台 凤凰平台 娱乐天地 娱乐天地 娱乐天地 娱乐天地 葡京 时时彩 即时比分 即时比分 365体育投注 江苏快三 比分 比分 澳门巴黎人 赌博 街机游戏 足彩网 腾讯分分彩 排列3 澳门金沙 美高梅 赌博网 天下足球网 365备用网址 捕鱼达人3 赌博网 赌博网 大发体育 1956 东森娱乐 大发888赌场 大发888赌场 bbin bbin bbin 捕鱼达人2 凤凰娱乐 现金网 金沙娱乐 澳门百家乐 澳门百家乐 bbin 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 幸运7 万达娱乐 拉菲娱乐 江苏快三 1号站平台 葡京 金沙 凤凰娱乐 万达平台 新葡京 澳门金沙 电子游戏 新葡京 银河 电子游戏 杏彩娱乐 万达平台 BBIN 金蟾捕鱼 新葡京 杏彩网 蒙特卡罗 万达娱乐平台 澳门金沙 申博 申博 翡翠娱乐 赌博 娱乐天地 银河 老虎机 新濠天地 凤凰娱乐 娱乐天地 我爱旅游 万达娱乐 凤凰娱乐 电子游戏 东森娱乐 万达娱乐 娱乐天地 万达娱乐 1号站 畅博娱乐 万达娱乐 万达娱乐 万达娱乐
当前位置:主页 > 辨析 >

JavaScript 函数节流和函数去抖应用场景辨析

发布日期:2017-04-16 11:53   点击次数:

也是好久没更新 源码解读,看着房价蹭蹭暴涨,心里也是五味杂陈,对未来充满恐惧和迷茫 ...(敢问一句你们上岸了吗)

言归正传,今天要介绍的是 underscore 中两个重要的方法,函数节流和函数去抖。这篇文章不会涉及具体的代码实现(关于代码实现请期待下文),会从零开始介绍函数节流和函数去抖的概念,辨析应用场景。为什么我对这两个方法情有独钟要花大篇幅去介绍?因为就是它们带我入了「underscore 源码解读」的坑(详见 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考)。

函数节流和去抖的出现场景,一般都伴随着客户端 DOM 的事件监听。举个例子,实现一个原生的拖拽功能(不能用 H5 Drag&Drop API),需要一路监听 mousemove 事件,在回调中获取元素当前位置,然后重置 dom 的位置(样式改变)。如果我们不加以控制,每移动一定像素而触发的回调数量是会非常惊人的,回调中又伴随着 DOM 操作,继而引发浏览器的重排与重绘,性能差的浏览器可能就会直接假死,这样的用户体验是非常糟糕的。我们需要做的是降低触发回调的频率,比如让它 500ms 触发一次,或者 200ms,甚至 100ms,这个阈值不能太大,太大了拖拽就会失真,也不能太小,太小了低版本浏览器可能就会假死,这样的解决方案就是函数节流,英文名字叫「throttle」。函数节流的核心是,让一个函数不要执行得太频繁,减少一些过快的调用来节流。

说完函数节流,再看它的好基友函数去抖(debounce)。思考这样一个场景,对于浏览器窗口,每做一次 resize 操作,发送一个请求,很显然,我们需要监听 resize 事件,但是和 mousemove 一样,每缩小(或者放大)一次浏览器,实际上会触发 N 多次的 resize 事件,用节流?节流只能保证定时触发,我们一次就好,这就要用去抖。简单的说,函数去抖就是对于一定时间段的连续的函数调用,只让其执行一次。

throttle 应用场景

函数节流有哪些应用场景?哪些时候我们需要间隔一定时间触发回调来控制函数调用频率?

DOM 元素的拖拽功能实现(mousemove)

射击游戏的 mousedown/keydown 事件(单位时间只能发射一颗子弹)

计算鼠标移动的距离(mousemove)

Canvas 模拟画板功能(mousemove)

搜索联想(keyup)

监听滚动事件判断是否到页面底部自动加载更多:给 scroll 加了 debounce 后,只有用户停止滚动后,才会判断是否到了页面底部;如果是 throttle 的话,只要页面滚动就会间隔一段时间判断一次

debounce 应用场景

函数去抖有哪些应用场景?哪些时候对于连续的事件响应我们只需要执行一次回调?

每次 resize/scroll 触发统计事件

文本输入的验证(连续输入文字后发送 AJAX 请求进行验证,验证一次就好)

小结

函数节流和函数去抖的核心其实就是限制某一个方法被频繁触发,而一个方法之所以会被频繁触发,大多数情况下是因为 DOM 事件的监听回调,而这也是函数节流以及去抖多数情况下的应用场景。至于函数节流和去抖方法的具体代码实现以及调用方式,下文我们再做分享。

附另外两篇关于 underscore 函数节流以及去抖源码剖析的文章


图文推荐

网剧《匆匆那年》侵权 原

凤凰网娱乐讯 80后女作家王晓頔(笔名九...[详细]

21岁网剧《匆匆那年》出道

温情脉脉的眼神,清秀温暖的外表,平静...[详细]

疯狂原始人挖宝揭秘 探寻

疯狂原始人挖宝揭秘 探寻上古宝藏,探索...[详细]

疯狂原始人 跟着部落有肉

在危险的史前世界,所有原始人们必须抱...[详细]

疯狂原始人音乐治疗者乐

乐师在《疯狂原始人》中承担治疗的职责...[详细]