js性能优化之函数缓存
来源:互联网 发布:淘宝产品拍摄价格表 编辑:程序博客网 时间:2024/05/17 08:17
所谓函数缓存,就是将函数运算过的结果缓存起来,这种做法是典型的用内存去换取性能的手段,常用于缓存数据计算结果和缓存对象。下面我们来看看一个使用例子:缓存jQuery对象。我们先来看一段代码:
<pre name="code" class="javascript"><span style="font-size:18px;color:#75715e;">function a(){</span><pre name="code" class="javascript"><span style="font-size:18px;"><span style="color:#ff0000;">$('#div')</span><span style="color: rgb(117, 113, 94); font-family: Arial, Helvetica, sans-serif;">.click(function(){</span></span>// do something});}function b(){
<span style="font-size:18px;"><span style="color:#ff0000;">$('#div')</span><span style="color: rgb(117, 113, 94); font-family: Arial, Helvetica, sans-serif;">.animate({</span></span>// code .....},1000);}
jQuery的$(selector)是一个工厂函数,该函数会构造一个与selector对应的对象,上面的代码用了两次 $('#div'),会产生两个不同的对象。这时,就造成了内存和CPU资源的浪费,因为我们为了操作同一个DOM元素而构造了两个对象。为了能够用一次$函数,就能实现上面的代码,我们得到下面的代码:
<pre name="code" class="javascript"><pre name="code" class="javascript"><span style="font-size:18px;"><span style="color:#75715e;">var </span><span style="color:#ff0000;">div</span><span style="color:#75715e;"> = $('#div');function a(){</span></span><pre name="code" class="javascript"><pre name="code" class="javascript"><span style="font-size:18px;"><span style="color:#ff0000;">div</span><span style="color: rgb(117, 113, 94); font-family: Arial, Helvetica, sans-serif;">.click(function(){</span></span>// do something});
<span style="font-size:18px;color:#75715e;">}</span>
<span style="font-size:18px;color:#75715e;"></span>
<span style="font-size:18px;color:#75715e;">function b(){</span><pre name="code" class="javascript"><pre name="code" class="javascript"><span style="font-size:18px;"><span style="color:#ff0000;">div</span><span style="color: rgb(117, 113, 94); font-family: Arial, Helvetica, sans-serif;">.animate({</span></span>// code .....
<span style="font-size:18px;">},1000);</span>}
上面的代码,用一个变量div将$('#div')返回的对象缓存起来,替代原来需要使用$('#div')的地方,避免了构造2个jQuery对象,达到了提高性能的目的。但是,这种做法也有一些不足,如果代码一多,出现很多个selector不同jQuery对象,那我们就需要使用大量的变量。为了解决这个问题,函数缓存就派上用场了。代码及解释如下:
<span style="font-size:18px;">function w(<span style="color: rgb(117, 113, 94);">selector</span>){ if(!w.cache) w.cache = {}; //如果函数没有cache属性,则创建一个cache属性,值为一个空对象</span>
<span style="font-size:18px;"></span><pre name="code" class="javascript" style="color: rgb(117, 113, 94);"><span style="font-size:18px;">//如果selector已经存在于w.cache中,则返回缓存结果;如果</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">缓存中</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">没有,则调用jQuery方法,将</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">$(selector)缓存在w.cache中,并返回给函数w。</span>return w.cache[selector] = w.cache[selector] || $(selector);
} 之前的代码就可以改成:
function a(){ w('#div').click(function(){ // do something});}function b(){ w('#div').animate({ // code ....},1000);}现在的代码就比之前的简洁多了,而且性能也得到了提高,也不用使用多余的变量。
缓存的优势不言而喻,当然缺点也有,至于什么时候该用缓存,就见仁见智了。
0 0
- js性能优化之函数缓存
- js性能优化之函数节流
- js性能优化之分时函数
- js性能优化之惰性加载函数
- JS性能优化 -- 函数节流
- Web性能优化之动态合并JS/CSS文件并缓存客户端
- Asp.net 性能优化之缓存应用
- [Android]ListView性能优化之视图缓存
- ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- ASP.NET性能优化之局部缓存
- Oracle性能优化 之 库缓存
- Android ListView性能优化之视图缓存
- ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- Spark源码学习(4)——Scheduler
- IOS开发多线程 - 多线程的简单介绍
- python安装numpy函数库
- 常见编程语言简介
- 快速排序的初识(附C代码)
- js性能优化之函数缓存
- linux下libxml2使用
- 尝试写款小游戏吧
- ARM异常中断返回的几种情况
- 17. Letter Combinations of a Phone Number
- HanList<T> 实现 类似stl:list<T>
- SQLServer行列转换
- Tabhost的简单用法
- (OK) Ubuntu 15.10: KVM vs. Xen vs. VirtualBox Virtualization Performance