debounce(防抖) 与 throttle(节流) 主要是用于用户交互处理过程中的性能优化。都是为了避免在短时间内重复触发(比如scrollTop等导致的回流、http请求等)导致的资源浪费问题。

debounce与throttle的区别主要在于:

1. debounce是通过设置定时器,在延迟的时间内每次触发都会重置定时器,直到在某个延迟时间点内不再触发事件才会执行。

2. throttle也是通过设置定时器,只是在延迟时间内用户只有首次触发是有效的,其他触发都是无效的,只有等延迟时间到了才会执行该事件。

理论有点枯燥,直接看代码:

 <!DOCTYPE html>
<html>
<head>
<title>debounce</title>
<style type="text/css">
#box {
width: 300px;
height: 150px;
border: 1px solid #eee;
background-color: #e3e3e3;
}
</style>
</head>
<body>
<div id="box"></div> <script type="text/javascript">
let divEle = document.querySelector('#box');
let count = 0;
divEle.addEventListener('mousemove', debounce(cbFn, 1000)); function debounce(callback, delay) {
let timer = null;
return function() {
timer && clearTimeout(timer);
timer = setTimeout(function(){
callback.apply();
}, delay)
}
} function cbFn() {
divEle.innerHTML = ++count;
}
</script>
</body>
</html>
 <!DOCTYPE html>
<html>
<head>
<title>throttle</title>
<style type="text/css">
#box {
width: 300px;
height: 150px;
border: 1px solid #eee;
background-color: #e3e3e3;
}
</style>
</head>
<body>
<div id="box"></div> <script type="text/javascript">
let divEle = document.querySelector('#box');
let count = 0;
divEle.addEventListener('mousemove', throttle(cbFn, 1000)); function throttle(callback, delay) {
let preTime = new Date().getTime();
return function() {
const now = new Date().getTime();
if (now - preTime > delay) {
preTime = now;
setTimeout(function() {
cbFn();
}, delay)
}
}
} function cbFn() {
divEle.innerHTML = ++count;
}
</script>
</body>
</html>

js 防抖 debounce 与 节流 throttle的更多相关文章

  1. 防抖debounce和节流throttle

    大纲 一.出现缘由 二.什么是防抖debounce和节流throttle 三.应用场景 3.1防抖 3.2节流 一.出现缘由 前端开发中,有一部分用户行为会频繁触发事件,而对于DOM操作,资源加载等耗 ...

  2. js 函数的防抖(debounce)与节流(throttle) 带 插件完整解析版 [helpers.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         函数防抖与节流是做什么的?下面进行通俗的讲解. 本文借鉴:h ...

  3. js 函数的防抖(debounce)与节流(throttle)

    原文:函数防抖和节流: 序言: 我们在平时开发的时候,会有很多场景会频繁触发事件,比如说搜索框实时发请求,onmousemove, resize, onscroll等等,有些时候,我们并不能或者不想频 ...

  4. Java版的防抖(debounce)和节流(throttle)

    概念 防抖(debounce) 当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时. 防抖,即如果短时间内大量触发同一事件,都会 ...

  5. 防抖(Debounce)与节流( throttle)区别

    http://www.cnblogs.com/ShadowLoki/p/3712048.html http://blog.csdn.net/tina_ttl/article/details/51830 ...

  6. JavaScript 防抖(debounce)和节流(throttle)

    防抖函数 触发高频事件后,n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 /** * * @param {*} fn :callback function * @param {* ...

  7. C#.Net下的防抖-Debounce和节流阀-Throttle功能实现

    C#下的防抖-Debounce.节流阀-Throttle功能实现 防抖-Debounce 连续的多次调用,只有在调用停止之后的一段时间内不再调用,然后才执行一次处理过程. 节流阀-Throttle 连 ...

  8. JS中的函数节流throttle详解和优化

    JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...

  9. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

随机推荐

  1. MySQL 8 配置文件

    包括功能: 端口,是否启用bin log , 指定目录, InnoDB是否启用压缩,MySQL使用旧的密码验证方式. 说明,建表的时候要添加必要的参数才会启用表数据压缩存储,以下为例: CREATE ...

  2. impdp导入dmp数据实例

    --创建表空间 create tablespace ALIX datafile 'F:\File\ALIX.ora' size 1000m; --创建数据库目录 create directory ex ...

  3. 网盘资源分享:你不知道的JavaScript(上)

    链接:https://pan.baidu.com/s/1UEBetOr2Z94oEeu5VsQYXQ 提取码:etts 复制这段内容后打开百度网盘手机App,操作更方便哦

  4. json转换字符串

    在使用json模块时需要先 import json 引入模块 json.dumps()模块函数 功能:将Python数据类型转换成字符串[有参] 使用方法:json.dumps(要转换的数据类型变量) ...

  5. iOS 性能优化总结

    卡顿产生的原因 在 VSync信号到来后,系统图形服务会通过 CADisplayLink等机制通知 App,App主线程开始在 CPU中计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等.随 ...

  6. day24_python_1124

    1  复习 2  TCP-UDP协议 3  tcp协议的socket 4  复杂tcp协议的socket 5  带退出的聊天程序 6  时间练习demo 7  粘包现象 1.复习 # 网络编程概念# ...

  7. 跟随我在oracle学习php(14)

    CSS3的@keyframes用法详解: 此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识: keyfram ...

  8. session和cookie的区别是什么,他们都是什么.

    Session是存储在服务器端的,Cookie是存储在客户端的. Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息.如何识别特定的客户呢?cookie就可以做到.每次HTTP请求时, ...

  9. min_25筛题目总结

    看了网上众多博客后,我才发现,实现min_25只有脑子,没有代码. 当然可能是我太ruo了. min_25是一种想法,不是算法. 不要尝试套模板,因为很多题目并没有什么用. 最重要的一点,g不要看成是 ...

  10. C# [LINQ] Linq Expression 获取多格式文件

    using System; using System.IO; using System.Linq; using System.Linq.Expressions; internal static str ...