zoukankan      html  css  js  c++  java
  • 页面静态化

    页面静态化和静态缓存

    静态缓存:还需要请求php一些简单的判断,只是一些复杂的逻辑结构不需要再进行php处理。如在缓存数据库中的数据,这样就不用每次都请求数据库。典型的例子就是smarty中有页面静态缓存。

    静态化:静态化相对于页面静态缓存更进了一步,使用静态化,就不需要使用php处理任何业务。每次请求的页面就是一个HTML页面。所以在优化的层面上,已经达到了顶层。如dedecms中使用生成首页。下次访问的时候,只是访问index.html。没有任何的php逻辑处理。

    使用ob缓存制作页面静态化:

    ob缓存使用:

      在php解释执行中,在返回到服务器(apache/nginx)时,在这个php中,有一个输出缓冲区和一个程序缓冲区。要返回的内容都被缓冲到这。

      输出缓冲:要输出的内容缓冲到这

      程序缓冲:是在输出缓冲的下一个阶段,如果输出缓冲被关闭,内容缓冲在这。

    输出缓冲:

    开启缓冲:ob_start('这里可以有一个回调函数,也就是前置钩子函数');这样接下来的内容都会被缓冲到输出缓冲中。注意:这里缓冲的内容只能是http主体内容。如:头信息是不能被缓冲到输出缓冲区的header('');

    刷新缓冲:ob_flush()如果程序在开启缓冲区时,中间没有刷新缓冲区,则在脚本运行结束之后会自动刷新缓冲区。

    还有很多的ob_系列的函数,可以参见手册。

    注意:在一个页面中可以开启多个输出缓冲区,可以使用ob_get_level()函数,查看当前处于哪个输出缓冲区中。开启的多个输出缓冲是相互嵌套的就像if()语句嵌套一样。关闭时也是关闭相对应的输出缓冲。

    程序缓冲:

    程序缓冲就一个函数flush()来刷新程序缓冲区。不能做任何其他的操作。

    弄清了这缓冲区的作用,我们可以让每次在程序中得到的数据立马刷新到浏览器中。这样就可以做聊天系统。

    ob_end_clean();//关闭缓冲区

    while(true){

    .....

    flush();//刷新程序缓冲区,因为程序缓冲区不能做任何的操作,只有刷新。这样我们将得到的内容立马个刷新到浏览器中展现出来

    }

    注意:有的浏览器需要到达一定的字节数量才能显示在浏览器中。我们可以使用一个技巧str_repeat(' ',1024);在while()之前输出,这样内容就多了。

    我们可以通过输出缓冲将内容写到相应的html文件中,这样就可以做页面静态化。使用程序控制,下次请求的时候就直接请求HTML。

    使用静态化注意的问题:

    css/js/img路径可能不对,所以在做程序的时候,这些路径最好是生成根路径/

    可能有的地方的数据需要是最新的。如用户评论,在解决这个问题我们可以使用ajax技术来弥补这个缺憾,做到部分数据实时性。

  • 相关阅读:
    spring+hibernate 整合异常 Class 'org.apache.commons.dbcp.BasicDataSource' not found
    ExtJS+SpringMVC文件上传与下载
    没有权限角色管理功能菜单加载
    java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java he
    js 验证input 输入框
    目录结构
    文件权限命令 linux
    Java 代码完成删除文件、文件夹操作
    js 获取时间不能大于当前系统时间
    hibernate createQuery和createSQLQuery 查询结果count计算
  • 原文地址:https://www.cnblogs.com/shiwenhu/p/4413975.html
Copyright © 2011-2022 走看看