js中值得推荐的Memoization

根据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]();//原书中少了执行的括号
}
}
}

附:更多的讲解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

原文地址:https://www.cnblogs.com/pinocchioatbeijing/p/2323114.html