动态页面静态化的实现
首先,应该明确动态页面与静态页面之间的区别,为什么静态页面的加载要比动态的快。
PHP文件的执行阶段是:语法分析——>编译——>运行。
动态是执行这整个过程。
静态(只是一个纯静态的 html 文件),跳过了分析和编译的步骤,直接运行。
(优化页面响应时间的常见四种方法:动态页面静态化,优化数据库,使用负载均衡,使用缓存。。)
静态化用于那些不需要经常变动的页面,生成一个静态页面供用户访问,以减少服务器脚本的响应、计算时间。
PHP静态化-->伪静态:可以通过设置apache服务器得到,用户访问的网址是静态页面,实际上经过apache转换,实际上访问的是动态页面。
-->纯静态:html文件
-->局部纯静态:部分内容是动态的,通过ajax和JS技术辅助实现
-->全部纯静态
我们创建了一个文件,在文件里写东西,并不是直接写入(缓冲区已经开启的情况下),而是先写入到buffer中,buffer满了,或者我们主动将buffer中数据冲刷才写入到磁盘中的文件。生成静态文件的原理就是,文件a.php的echo的同时,把要输出的内容全部存进buffer中,再将buffer中统一存入一个新的静态文件a.html中(a.html实际上一开始是空的),下次如果再次访问a.php,如果a.html存在且没有过期,就直接将用户的访问导向a.html,跳过了更多的语法分析和编译。
(1)a.php获取数据库内容
(2)a.php 中,require_once('a.tpl')。.tpl由于是html文件,也会输出到终端。
(3)将数据填充到a.tpl中
(4)file_put_contents()将缓冲填充到a.shtml静态文件中,终端输出生成静态文件成功的提示。
实际中,用户是不关心a.php的,他们只访问a.shtml
buffer在php.ini文件中应该是默认开启的。"output-buffering = On"。若没有开启,可以在a.php有输出之前,ob_start()开启buffer。
ob_start()//开启缓冲区,若原先已默认开启,则相当于开启新的
ob_get_contents()//得到缓冲区内容