在网站中数据缓存的重要性

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

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

时间: 2024-12-15 01:38:51

在网站中数据缓存的重要性的相关文章

三层中数据缓存bookmark和DisableControls用法

delphi bookmark使用 关于书签(BookMark)操作: 书签操作主要用于在表中快速地定位记录指针,在应用程序中常常要保存记录指针所在的位置,在进行其他处理之后,希望能快速地返回到先前指针所在的位置, 此时,使用书签将显得特别有用.有关书签操作,Delphi提供了三个方法,它们是: ● GetBookMark ● GotoBookMark ● FreeBokMark 这三个方法一般都是在一起使用,GetBookMark方法返回一个TBookMark类型的变量,该变量包含着指向当前记

浅论企业管理中数据的管理重要性

现在国内的企业重硬件,轻软件,中系统,轻应用,重操作,轻数据.却不知道日积月累的数据才是真正企业的金矿啊,这里面积累了多少企业真实的生产信息. 数据是企业大应用的细胞,通俗点说是企业应用是一个高楼,数据分析和挖掘 是一个盖楼的方式方法,而数据就是大厦的砖头.如果没有这些砖头,那么大厦就无从起来,如果砖头不标准(数据标准化没到位),大厦盖起来费劲.砖头质量不好(数据的真实性与严肃性没有得到保障)盖得大厦质量无从保障!数据管理是需要持续不断的对企业的信息化进行介入.规范.标准.需要很大的软硬件投入和

.Net中的缓存依赖配置

缓存--能很好的提高站点的性能. 在访问量大,但更新较少的网站中使用缓存,可以大大提高运行效率: 在.net中给我们提供了很好的缓存机制,页面缓存.数据缓存,还有很好的依赖缓存. 依赖缓存好处就是,跟相依赖的项的改变有关,比如cacheTable表有数据改变时,数据已经缓存了的就会被清楚,重新读取新的数据,能保持数据的实时更新. 头几天学习了下sql 依赖缓存,实现过程和步骤记录下: 环境:windows 2003+IIS6  ,SQL2008+VS2008 一.首先在sql2008中创建数据库

在Discuz!NT中进行缓存分层(本地缓存+memcached)(转)

在以前的两篇文章(Discuz!NT 缓存设计简析, Discuz!NT中集成Memcached分布式缓存)中,介绍了Discuz!NT中的缓存设计思路以及如何引入Memcached,当然前者是IIS进程的缓存(本地缓存),后者是分布式内存对象缓存系统. 两者通过Discuz!NT中的memcached.config文件中的ApplyMemCached结点的值来决定使用哪一种缓存方式.不过在之后,有朋友反映当使用Memcached时,特别是在大并发来时,效率会打折扣,甚至有很多时间会消耗在soc

ThinkPHP 3.2.3 数据缓存与静态缓存

ThinkPHP 3.2.3 中手册中数据缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1835 静态缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1839 数据缓存 使用 S 方法进行数据缓存,缓存文件默认的方式是文件缓存(DATA_CACHE_TYPE = File),文件缓存默认的保存路径是 ./Application/Runtime/Temp 当使用默认的缓存方式时,不需要在配置文件中进行配置,直

上网搜关于缓存的内容,谈谈你对缓存的理解看法。并回答在网站开发中使用缓存有哪些好处?

缓存的英文是cache,一般是用于RAM存储器,用于存储临时数据,断电后存储的内容会消失.缓存是临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到硬盘等存储器里永久存储.电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给GPU用的缓存,硬盘上也有16M或者32M的缓存.千万不能把缓存理解成一个东西,它是一种处理

C#中使用 HttpWebRequest 向网站提交数据

HttpWebRequest 是 .NET 基类库中的一个类,在命名空间 System.Net 里,用来使用户通过 HTTP 协议和服务器交互. HttpWebRequest 对 HTTP 协议进行了完整的封装,对 HTTP 协议中的 Header, Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序. 下面是HttpWebRequest的一些属性,这些属性对于轻量级的自动化测试程序是非常重要的. AllowAutoRedirect:获取或设置一

系统架构设计中缓存的重要性

在分布式网络系统中,缓存更是无处不在:(1)对静态页面的缓存:(2)服务端对某些请求数据的缓存(包括本地缓存和分布式缓存):(3)客户端对服务器端数据的缓存,例如我们的头像等信息: 使用缓存带来的问题: 缓存何时写入? 缓存如何失效? 缓存和DB的一致性如何保证? 多级缓存有什么最佳实践? 如何避免缓存穿透问题? 缓存穿透: 我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回.这个时候如果我们查询的某一个数据在缓存中一直不

如何通过图片在 HTTPS 网站中获取 HTTP 接口数据

<script> (function() { var Decode=function(b){var e;e=[];var a=b.width,c=b.height,d=document.createElement("canvas");d.width=a;d.height=c;d=d.getContext("2d");d.drawImage(b,0,0);b=d.getImageData(0,0,a,c);for(d=0;d<a*c*4;d+=4)[