zoukankan      html  css  js  c++  java
  • 在网站中数据缓存的重要性

    通过计算斐波那契数列明白缓存在网站开发中的重要性

    1 、首先测试一下没有使用数据缓存来计算斐波那契数列。

      var count = 0;
        function fib(n) {
            count++;
            if(n === 0 || n === 1) {
                return 1;
            }
    
            return fib(n - 1) + fib(n - 2);
        }
         fib(40);
        console.log(count);//count是函数fib运算次数,当fib(40)时候运行次数高达:331160281次,感兴趣的可以检测一下。
    

    2、下面我们看看使用数据缓存来计算斐波那契数列。

      // 缓存是怎么使用的?
        // 一般的缓存结构就是:键值对(对象 或者 数组)
        // var obj = {};
        // var arr = [];
        // 使用缓存的方式:
        // 1 先去缓存中查找有没有键对应的数据
        // 2 如果有,就直接拿过来使用
        // 3 如果没有,就计算或者是查询到,然后,要放到缓存中!
        // 4 以后,就通过缓存来去数据
        // 简化的步骤:先去缓存中查询有没有,如果没有就计算,并将结果放到缓存中
        // 问题:缓存放到什么位置去??
        // 如果是全局变量,此时,任何人都能修改全局变量的内容
        // 那就造成:数据不准确
        // var obj = {};
    
        // 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89....
        var count = 0;
        var fib = (function() {
            // 使用闭包,将缓存放到闭包中去,
            // 此时,就对这个缓存起到了保护的作用
            // var cache = {};
            var cache = [];
    
            // 这个函数使用来计算:斐波那契数列
            return function(n) {
                count++;
                // 1 先去缓存中查找有没有该键对象的值
                if(cache[n] !== undefined) {
                    // 2 如果有,就直接返回当前的值
                    return cache[n];
                }
    
                // 3 如果没有,就计算,然后要添加到缓存中去
                if(n === 0 || n === 1) {
                    // return 1;
                    cache[n] = 1;
                    return cache[n];
                }
    
                var temp = arguments.callee(n - 1) + arguments.callee(n - 2);
                // 放到缓存中去
                cache[n] = temp;
                return cache[n];
            };
        })();
    
        fib(40);
    
        console.log(count);// 计算次数为:79次。
    

    通过上面两次对比,瞬间觉得数据缓存的重要性,由331160281次下降到79次。感兴趣的屌丝可以测试一下fib(50);的运行次数,不使用数据缓存我测试了,我的浏览器崩溃了,使用数据缓存运行才99次。

  • 相关阅读:
    Codeforces Round #649 (Div. 2) D. Ehab's Last Corollary
    Educational Codeforces Round 89 (Rated for Div. 2) E. Two Arrays
    Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors
    Codeforces Round #647 (Div. 2) E. Johnny and Grandmaster
    Codeforces Round #647 (Div. 2) F. Johnny and Megan's Necklace
    Codeforces Round #648 (Div. 2) G. Secure Password
    Codeforces Round #646 (Div. 2) F. Rotating Substrings
    C++STL常见用法
    各类学习慕课(不定期更新
    高阶等差数列
  • 原文地址:https://www.cnblogs.com/lsy0403/p/5854691.html
Copyright © 2011-2022 走看看