在实际工作中,我们会经常遇到这样的业务场景,比如点击按钮提交表单,点击一次发一次请求,如果快速点击多次会发送多次请求,这样发送了多次请求是我们不愿意看到的。又比如输入框我们输入内容会调搜索的接口,那么每当我们输入一个字符都会发送一次请求......为了解决类似的困扰,那么节流模式就应运而生了。

//   节流模式的核心思想是创建定时器,延迟程序的执行.var throttle = function f() {arguments.slice = Array.prototype.slice;var fn,params=[];//如果第一个参数是boolean类型那么第一个参数表示清除定时器if(typeof arguments[0] === 'boolean') {//第二个参数为函数fn = arguments[1];//函数的计时器句柄存在,清除该定时器fn.__throttleID && clearTimeout(fn. __throttleID);//工作计时器延迟执行函数} else {fn = arguments[0];params = arguments.slice(1);f(true,fn);//为函数绑定句柄函数fn.__throttleID = setTimeout(function() {//执行函数fn.apply(null, params);}, 500)}}

  下面让我们开尝试调用一下

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title></head><body><input type="text" id="inputDom"/></body>
</html><script type="text/javascript">var content = document.getElementById('inputDom');function press() {console.log("开始输入了");}content.onkeyup = function (){throttle(press,1,2,3);}</script>

  可以看到,当连续输入内容,在500毫秒内只发一次,这就达到了节流的效果了。

  

转载于:https://www.cnblogs.com/linxing/p/10984181.html

JS设计模式—节流模式的实际应用相关推荐

  1. JS设计模式--组合模式

    JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...

  2. js设计模式——组合模式

    组合模式将对象组合成树形结构,以表示"部分-整体"的层次结构.除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,是的用户对单个对象和组合对象的使用具有一致性. ...

  3. js设计模式-组合模式

    组合模式是一种专为创建web上的动态用户界面而量身定制的模式.使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象. ...

  4. JS设计模式——工厂模式

    什么是工厂模式? 工厂模式(Factory Pattern)是创建型设计模式.在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来创建对象. 简单工厂模式 假如有一个 ...

  5. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

  6. js 设计模式—工厂模式

    1.简单工厂模式,又称为静态工厂方法,单一种类的复制使用 // 简单工厂函数 封装 动物 function A(name, six) {var o = new Object()o.name = nam ...

  7. js设计模式--代理模式

    /*定义: 代理是一个对象,它可以控制另一个对象的访问, 它与另外哪个对象实现了同样的接口, 并且会把任何方法调用传递给哪个对象. 注意:代理只是控制对另一个对象的访问,不会像装饰者那样添加或者修改另 ...

  8. 云计算设计模式(二十三)——Throttling节流模式

    云计算设计模式(二十三)--Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这样的模式能够同意系统继续执行并满足服务水平协议.即使当添加需求的资源放置 ...

  9. JS设计模式之Module(模块)模式、Revealing Module(揭示模块)模式

    Module(模块)模式 概念 Module模式最初被定义为一种在传统软件工程中为类提供私有和共有封装的方法. 通过这种方式,能够使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用局的特殊 ...

最新文章

  1. linux sar 命令详解
  2. 图片裁剪的js有哪些(整理)
  3. linux设备驱动之总线、设备、驱动
  4. 文件管理的艺术之SVN从零搭建
  5. Mongodb 与 Redis 调教
  6. 移动web开发(三)——字体使用
  7. [剑指offer][JAVA]面试题第[64]题[求1+2+…+n][逻辑运算符]
  8. Uvaoj10054 - The Necklace
  9. 笔记 Json语法 01
  10. php 漂亮的分页类
  11. 从一个真实案例看性能差异问题处理方法论
  12. linux指令 sed,Linux命令sed
  13. matlab 读取视频出现的问题
  14. 苹果6发布时间_苹果11月秋季发布会直播时间几点 App Store提前爆大招
  15. PBRT笔记(11)——光源
  16. C++ Primer 5th - 1.1 编写一个简单的C++程序
  17. tabbar角标 小程序_关于小程序tabbar不支持传参的处理办法
  18. 7.arm汇编 bic和orr指令
  19. html怎么修改边距,html怎么设置div边距
  20. 如何集成支付宝到电脑网站

热门文章

  1. centos,yum安装时报错could not retrieve mirrorlist,resolve.conf配置,dns配置错误
  2. JAVA - package与import解析(一)
  3. 【CF】556D A Lot of Games
  4. 《Objective-c》-(@property和@synsthesize)
  5. Rhel6服务器ftp服务配置
  6. 分享自己整理的《UIT备份容灾解决方案培训稿》
  7. python3 reqeusts后写入excel
  8. python3 进程
  9. python运维开发之第十一天(RabbitMQ,redis)
  10. 【加】德鲁·卡宾森 - 质量效应3:天罚(2013年6月26日)