JavaScript性能优化技巧之函数节流

开发 前端
函数节流技术的主要思路是,通过一个定时器,阻断连续重复的函数调用。对于我们自己内部使用的函数,这通常意义不大,也不推荐使用这个技术,它可能会丢失对某些数据的处理。但是对于在用户界面调用的函数,却非常有意义。

函数节流技术的主要思路是,通过一个定时器,阻断连续重复的函数调用。对于我们自己内部使用的函数,这通常意义不大,也不推荐使用这个技术,它可能会丢失对某些数据的处理。但是对于在用户界面调用的函数,却非常有意义。例如一个 mousemove 或者 IE 中 resize 事件的监听函数。

 

[[45240]]

 

这类事件监听函数往往伴随着两个主要特征:1. 短时间内连续多次重复触发 ; 2. 大量的 DOM 操作。众所周知,DOM 操作对内存和 CPU 的开销是比较大的,特别是当同时满足特征1时,往往给浏览器造成不小的压力。函数节流技术的意义在于在用户察觉范围外,降低函数调用的频率,从而提升性能。

这个技巧的大概模式如下面这样:

  1. var processor = {  
  2.     timeoutId: null,  
  3.  
  4.     performProcessing: function(){  
  5.             // 要执行的代码  
  6.     },  
  7.  
  8.     process: function(){  
  9.         clearTimeout(this.timeoutId);  
  10.         this.timeoutId  = setTimeout(function(){  
  11.             processor.performProcessing();  
  12.         }, 100);  
  13.     }  
  14. };  
  15.  
  16. //调用  
  17. processor.process();  
  18. performProcessing 是真正要调用的函数,而程序的入口在 process,每次进入 process,真正要调用的函数
  19.  performProcessing 都会被延迟 100 毫秒执行,如果在此期间,process 再次被调用,则会重置前一次的计时器,
  20. 重新开始计时,这样保证了 performProcessing 中的代码至少要间隔 100 毫秒才会被执行一次,原理非常的简单,
  21. 下面这个函数也是利用这个原理,通过闭包达到了同样的目的,它接受两个参数,***个是要真正要执行的函数,第二个是间隔的时间。  
  22. function throttle(fn, delay) {  
  23.     var timer = null;  
  24.     return function () {  
  25.         var context = thisargs = arguments;  
  26.         clearTimeout(timer);  
  27.         timer = setTimeout(function () {  
  28.         fn.apply(context, args);  
  29.     }, delay);  
  30.   };  
  31. }  

【编辑推荐】

  1. JavaScript大辩论:实施改进还是彻底放弃
  2. Google强推Dart语言替代JavaScript 意欲何为?
  3. 在.NET中使用Javascript作为脚本语言
  4. JavaScript有关的10个秘密和怪癖
  5. 10个***Web移动开发JavaScript框架推荐
责任编辑:陈贻新 来源: HTML5研究小组
相关推荐

2011-07-11 15:26:49

性能优化算法

2011-06-14 14:32:46

性能优化

2011-06-14 13:48:07

性能优化工具

2011-06-14 14:17:23

性能优化系统层次

2016-06-30 10:24:47

JavaScript节流Throttle

2011-06-14 11:14:10

性能优化代码

2022-02-25 23:46:54

JavaScript网站开发

2017-12-23 14:38:41

Android编程开发优化

2022-12-26 08:25:16

CSS函数节流

2020-12-17 07:52:38

JavaScript

2011-03-11 15:53:02

LAMP优化

2011-03-11 15:52:57

LAMP优化

2009-06-16 16:39:49

Hibernate性能

2018-11-20 10:50:00

Java性能优化编程技巧

2013-06-08 14:19:05

性能优化KVM

2019-08-21 10:53:29

.NET性能优化

2012-07-23 10:22:15

Python性能优化优化技巧

2019-02-25 07:07:38

技巧React 优化

2009-12-09 17:33:22

PHP性能优化

2011-03-11 15:53:00

LAMP优化
点赞
收藏

51CTO技术栈公众号