一个简单的javascript节流器实现
节流器
javascript的节流器主要用于延缓某些动作的执行,比如ajax请求,如果input框注册了input事件,那么当用户输入时就会持续的触发这个事件,如果回调函数中持续的通过ajax调用后台的接口,就会对服务器产生一定压力。这时就可以考虑采用某种方法来延缓ajax请求,比如可以这么做,当触发input事件后,延缓0.5s再调用后台的接口,这样在一定程度上就可以减轻服务端的压力。
下面来实现一个简单的节流器
/**
* 节流器
* @param [function] fn 事件触发后要调用的函数,也就是要节流的函数
* @param [object]context fn的执行上下文对象,没有执行对象设为null即可
* @param [number] delay 延缓执行的时间间隔 毫秒
* @param param fn需要的参数
* @return 无
*/
function throttle(fn, context, delay, param) {
clearTimeout(fn.timeoutId); fn.timeoutId = setTimeout(function () {
fn.call(context, param);
}, delay);
}
通过参数注释和代码应该能够大概看明白这个throttle要做的事情:延缓fn的执行,这个通过setTimeout函数来执行即可。
### 使用节流器
使用时也很简单,将fn、context、delay、params传入即可:
var ajaxFun = function() { // 略 };
throttle(ajaxFun, null, 500, someParams);
其实上面的节流器代码还可以再简化,不过就没有上面的健壮了。
// 节流器
function throttle(fn, delay, param) {
setTimeout(function () {
fn(param);
}, delay);
}
这篇文章最初发表在我自己折腾的博客站点上:一个简单的javascript节流器实现,该博客用了一位前辈开源的源码,基于thinkjs和vuejs开发,欢迎大家来逛逛。
一个简单的javascript节流器实现的更多相关文章
- 一个简单的Javascript闭包示例
//=====用闭包实现函数的Curry化===== //数字求和函数的函数生成器 function addGenerator( num ){ //返回一个简单的匿名函数,求两个数的和,其中第一个数字 ...
- 【译】采用MVC模式创建一个简单的javascript App
原文标题:Build A Simple Javascript App The MVC Way 作者:joshcrawmer4 翻译人:huansky 初次翻译,翻译的不好,还请见谅 JavaScrip ...
- 采用MVC模式创建一个简单的javascript App
初次翻译,翻译的不好,还请见谅 JavaScript中最好的一部分之一,也可能是最糟糕的. 在HTML文档的头部添加一个开始和结束脚本标记,并在其中引入一些意大利面条式的代码,毫无疑问这是一种过分简单 ...
- 一个简单的JavaScript Map
用js写了一个Map,带遍历功能,请大家点评下啦. //map.js Array.prototype.remove = function(s) { for (var i = 0; i < thi ...
- 一个简单的JavaScript实例
1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- 一个简单的javascript深拷贝
var extendDeep = function(parent,child){ var i, toStr = Object.prototype.toString, astr = '[object A ...
- 一个简单的javascript获取URL参数的代码
function request(paras){ var url = location.href; var paraString = url.substring(url.indexOf("? ...
- js实现一个简单钟表动画(javascript+html5 canvas)
第一次在博客园注册发博.有一次去人家单位开标,看到开标网站上有个钟表动画,一时兴起,就写了个简单的钟表动画. 用js和html5 canvas对象实现一个简单钟表程序 主要用到的就是h5的canvas ...
- javascript编写一个简单的编译器(理解抽象语法树AST)
javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...
随机推荐
- 【读书笔记】iOS-微定位技术
在大型商场,医院或是大楼里,你是否曾经有过找不到想去的地方的经历呢?这种情况下采用传统的定位方法就有些力不从心了.首先这些地方不能采用GPS定们,而Wifi和蜂窝式移动电话基站定位误差比较大.这种情况 ...
- AWT初步—Frame和 Panel
初识 AWT GUI 和 AWT GUI:Graphics User Interface 图形用户界面 AWT:Abstract Window Toolkit 抽象窗口工具集 之前的程 ...
- Visualforce控制器
Visualforce框架是遵循MVC结构的.Visualforce页面代表了"视图"部分,Salesforce的各种对象代表了"模型"部分,而Apex则代表了 ...
- IDEA报错: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.url' in value "${spring.datasource.url}"
运行审核流模块: 在ActivitiServiceApplication模块日志报错: Error starting ApplicationContext. To display the auto-c ...
- Android中处理崩溃闪退错误
Android中处理崩溃闪退异常 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试, ...
- python的subprocess模块执行shell命令
subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...
- Spring Boot(二):Web 综合开发
详见:http://www.ityouknow.com/springboot/2016/02/03/spring-boot-web.html Web 开发 Spring Boot Web 开发非常的简 ...
- JavaScript高级特性-创建对象的九种方式
1. 对象字面量 通过这种方式创建对象极为简单,将属性名用引号括起来,再将属性名和属性值之间以冒号分隔,各属性名值对之后用逗号隔开,最后一个属性不用逗号隔开,所有的属性名值对用大括号括起来,像这样: ...
- [MapReduce_3] MapReduce 程序运行流程解析
0. 说明 Word Count 程序运行流程解析 && MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图
- 10LaTeX学习系列之---Latex的文档结构
目录 目录 前言 (一)对于Ctex宏包中的文档结构 1.说明 2.源代码 3.输出效果 4.技巧 (二)对于ctexart的文档结构 1.说明 2.源代码 3.输出效果 (三)对于ctexbook的 ...