1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 4.算法优化 -高性能JavaScript

4.算法优化 -高性能JavaScript

时间:2019-01-08 12:48:05

相关推荐

4.算法优化 -高性能JavaScript

既然是总结,就不要重复书中内容了,适当总结、扩展、思考。

实际上会用在javascript上面的算法实在是不会太多,但由于js非编译语言的特性,所以

浏览器解释器能给的优化不能算太好。优化仅有的一些循环和流程控制显得非常必要。

然后我一上来就中枪了,以为for in这样的写法会比较好写,所以一直做数组操作的时候

使用这个方法。但是,这个方法会同时搜索实例或原型属性,所以每次迭代的时候都会产生额外

的开销。因些,不要用for in来遍历数组。

递归如果次数太多,就不要使用了,会抛出异常。改用迭代。

如果不是均匀分布的话,可以使用二分法,找出数据出现次数多的一部分做数据判断切割。

书中提到了三个算法-

1.Duff's Device:处理大数据循环

var i = items.legnth%8;while(i){process(items[i]--); }i = Math.floor(items.elgnth/8);while(i){process(items[i]--); process(items[i]--); process(items[i]--); process(items[i]--); process(items[i]--); process(items[i]--); process(items[i]--); }

但是这里我产生了两个疑问,希望各位看客帮我解答一下。

1.为什么是八次。把一个循环用8拆分。

2.为什么这么做就可以减少很多时间问题?

实际上我感觉这个问题就像是把 for(i=0;i<100;i++)变成了

for(i=0;i<10;i++){

for(j=0;j<10;j++)

}

一样。那它改变的内容实质在哪里呢????

2.有映射关系的优化:

var arr = [r0,r1,r2,r3,r4,r5,r6,r7];return arr[i];会比 if(i==0){return r0;}else if(i==1){return r1;}快.但是。!!!!既然有映射关系,那还不如直接return r(映射值)*i(选择值);请各位看客帮我解答一下。

3.缓存技术算法:

function memoize(fundamental,cache){cache = cache||{};var shell = function(arg){if(!cache.hasOwnProperty(arg)){cache[arg] = fundamental(arg);}return cache[arg];};}调用方法:var memfactorial = memoize(factorial,{"0":1,"1":1});var fact6 = memfactorial(6);var fact5 = memfactorial(5);var fact4 = memfactorial(4);

实际上这个算法就是将以后可能会用到的计算过的值保存下来,用空间換取时间。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。