`

构建高性能Web站点(笔记二)

阅读更多

第四章 动态内容缓存


     缓存的作用: 避免重复计算。使用缓存就需要考虑命中率问题。
    
缓存方式:
          动态网页缓存: 缓存的内容是动态网页输出的Html。
          动态内容缓存的具体方法: Smarty模板框架,Cakephp、Django、Zend等MVC框架,不管它们支持多么丰富的特性,有一点是相同的,都是将视图(View)和控制器(Controller)进行分离,这样可以让控制器有缓存控制权,从而提供丰富灵活的缓存控制方法。
          局部无缓存: 允许在页面中指定一块包含动态数据的HTML代码,每次请求,动态数据都实时计算,然后和其余部分的缓存合成最终的网页。引入局部缓存后,动态网页控制器也要进行相应的修改,其目的是把无缓存区域对应的动态数据计算提到缓存检查之前,这样才可以保证每次都将实时计算后的结果输出到模板中。
          静态化网页缓存: 直接访问缓存,不再需要经过动态程序。
          局部静态化: 静态网页必须整页更新,它可以通过SSI(Server Side Include服务端包含,网页中include另外的网页)技术实现各个局部页面的独立更新。
                    shtml指令 <!--#include file="nav_head.htm"-->
          网页支持SSI时,每次请求服务器都会通读网页内容,查找include标签,这会增加CPU开销,减少吞吐率。
     缓存物理空间:
          磁盘:
            缓存文件过多时,不利于查找,这时可通过缓存目录分级来解决。IO开销大,如果磁盘同时还运行着数如据库这样的磁盘IO密集型应用,缓存文件的IO操作会存在延迟。
         
内存:
            先将数据或对象缓存在内存中,这样加载缓存时没有任何磁盘IO开销。
            例,借助PHP的APC模块将PHP运行时数据或对象缓存在内存中,APC停工了Key/Value的存储方式。
          缓存服务器: 利用memcached,可以很容易通过TCP将缓存存储在其他服务器中。

 
第五章 动态脚本加速


    缓存的目的是最大程度地跳过动态计算内容,然而,除非静态化访问,否则完全跳过动态内容的计算是不可能的。加载缓存需要动态运行脚本,可以通过提高动态脚本的运行速度来提高动态内容的处理。
    opcode: 解释器完成对脚本代码的分析后,会生成可以直接运行的中间代码,也叫操作码(Operate Code)
    解释(parse): 从程序代码到中间代码的过程叫解释,由解释器完成。
    编译(compile): 编译型语言中,将程序代码生成中间代码的过程叫编译,由编译器完成。
    
编译器和解释器的本质区别:
        解释器生成中间代码后,便直接执行它,所以运行时的控制权在解释器。
        编译器则将中间代码进一步优化,生成可以直接运行的目标程序,但不执行它,这时控制权在目标程序,和编译器就没有关系了。
    通过缓存opcode可以进行复用,从而加快脚本语言的执行速度。

    应用层无法缓存opcode,可借助opcode缓存器来缓存opcode,如PHP的APC、XCache、eAccelerator等。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics