根据Widipedia的定义,Memoization是一种旨在加速计算程序,避免函数调用过程中对先前已处理输入的重复计算而采取的优化技巧。
In computing, memoization is an optimization technique used primarily to speed up computer programs by having function calls avoid repeating the calculation of results for previously processed inputs. (Wikepedia-Memoization:http://en.wikipedia.org/wiki/Memoization)
今天在看Pro JavaScript Design Patterns碰到很好的一例,是讲Factory模式的使用时讲到的(Page100)。目标是用Factory模式构建一个进行Ajax请求的XHR Object,函数名为createXhrObject,构建的具体细节要根据运行的环境而定。第一次代码运行时,将检测三种不同的创建XHR Object的方式,找到一种可用的方式时,就返回这一对象,同时将这一函数自身用可用的创建该对象的函数覆写。代码如下:
SimpleHandler=function(){};
SimpleHandler.prototype={
request:function(){...},
createXhrObject:function(){
var methods=[
function(){return new XMLHttpRequest();},
function(){return new ActiveXObject('Msxml2.XMLHTTP');},
function(){return new ActiveXObject('Microsoft.XMLHTTP');}
];
for(var i=0, len=methods.length; i<len; i++){
try{
method[i]();
}
catch(e){
continue;
}
this.createXhrObject=methods[i];//覆写自身
return method[i]();//原书中少了执行的括号
}
}
}
pinocchioatbeijing按:使用Memoization的好处就在于,当今后再次需要创建该对象时,可以用这一相同的接口函数,直接使用已通过测试的可用方式,省却重复计算的过程,因而可提高运行效率。
附:更多的讲解Memoization的博文
http://hi.baidu.com/fengkuang031/blog/item/be89cc13a750a1cca6ef3f44.html
http://www.joy-studio.com/frontend-develop/javascript-branch-requirements-and-optimization.html#comment-24