页面静态化

页面静态化和静态缓存

静态缓存:还需要请求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技术来弥补这个缺憾,做到部分数据实时性。

原文地址:https://www.cnblogs.com/shiwenhu/p/4413975.html