美文网首页
js缓存加快运行速度

js缓存加快运行速度

作者: 十三流 | 来源:发表于2017-03-08 12:09 被阅读0次

    今天在做一个树形结构计算时使用了递归,使用js计算,树一旦比较大了,页面经常卡顿,后来调试发现问题出在递归函数上,后来给每个叶节点加了计算缓存才算解决了问题。
    为了弄明白究竟慢在哪里,自己做了个实验,以简单的斐波那契数列为例,先定义一个简单函数

    f=function(n){
        return n<2?n:f(n-1)+f(n-2);
    }
    

    再定义一个时间计算函数

    time=function(func){
        function dofunc(n){
            var t1=new Date();
            var r=func(n);
            var t2=new Date();
            console.log((t2-t1)+'ms');
            return r;
        }
        return dofunc
    }
    

    好了现在看看运行时间

    命令 ftime=time(f) 结果 时间
    ftime(30) 832040 1369ms
    ftime(31) 1346269 2199ms
    ftime(32) 2178309 3533ms
    ftime(33) 3524578 5884ms

    再往上去,我这电脑已经扛不住了,居然只能算到30左右。。。
    如果加个缓存试试呢

    重新定义一个带缓存的ff函数

    ff=function(){
        mem=[0,1];
        function f(n){
            var r=mem[n];
            if(typeof(r)!='undefined'){
                return r;
            }else{
                mem[n]=f(n-2)+f(n-1)
                return mem[n];
            }
        }
        return f
    }()
    

    再来看看运行时间

    命令 ftime=time(ff) 结果 时间
    fftime(30) 832040 0ms
    fftime(300) 2.2223224462942035e+62 1ms
    fftime(1000) 4.346655768693743e+208 1ms
    fftime(3000) Infinity 2ms

    太出乎我的意料了,也难怪那些大公司都对算法是有要求的...

    PS:后来想用快一点的语言会不会好些,于是用python测试了一下性能,发现也就是比js快个3、4倍的样子,不过遇到这样指数级的问题,光靠语言间的快慢是无法解决的,C/C++大拿不要嘲笑,我确实不会。。。

    相关文章

      网友评论

          本文标题:js缓存加快运行速度

          本文链接:https://www.haomeiwen.com/subject/akkbgttx.html