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次。

  • 相关阅读:
    React 之form表单、select、textarea、checkbox使用
    React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
    React事件方法、React定义方法的几种方式、获取数据、改变数据、执行方法传值
    react综合案例-todolist、localstorage缓存数据
    【剑指offer15】二进制中1的个数(位运算),C++实现
    【剑指offer】10矩阵覆盖
    【剑指offer】09-3变态跳台阶
    【剑指offer】顺时针打印矩阵,C++实现
    【剑指offer】09-2跳台阶,C++实现
    leetcode1143
  • 原文地址:https://www.cnblogs.com/fly-xfa/p/5918651.html
Copyright © 2011-2022 走看看