zoukankan      html  css  js  c++  java
  • 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);

    实际上这个算法就是将以后可能会用到的计算过的值保存下来,用空间換取时间。
  • 相关阅读:
    SpringCloud Alibaba微服务实战十
    万字长文!分布式锁的实现全都在这里了
    python编程中的小技巧(持续更新)
    工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
    github入门操作快速上手
    167. 两数之和 II
    167. 两数之和 II
    167. 两数之和 II
    怎么使用Fiddler进行抓包
    怎么使用Fiddler进行抓包
  • 原文地址:https://www.cnblogs.com/bugluo/p/2856947.html
Copyright © 2011-2022 走看看