php的页面静态化技术 ob(out_put buffering)
2014-11-07 23:36
239 查看
在大型网站中,例如首页面,新闻页面等一些经常访问,但数据却基本不变的页面大部分都是.html页面(静态页面),静态页面相对于动态页面,不仅能使网页的浏览速度提升N多倍,而且利于网站的seo。
对于用户较多的网站,缓存生成的静态页面有时候会减少百万次千万次的数据库访问,浏览速度的提升效果立竿见影。
php中的out_put buffering,简称ob技术,是一个生成静态页面比较简单的方法。
里面主要的函数有:
举例:
此时浏览器输出123,a.html中的内容为123
此时浏览器输出124,a.html中的内容为4 //ob_flush()将ob中的内容移动到程序缓存,而ob并未关闭,所以a.html中的内容为4
假设php开启了ob,则其先将输出显示的数据缓存到ob中,当程序执行结束或者ob_flush()后,ob中的内容会'移动'到程序缓存,最后程序缓存反馈给浏览器进行显示
也就是ob---->程序缓存------>浏览器,但如果ob中途被关闭的话,输出的数据则会直接缓存到程序缓存中。
至于flush();它区别于ob_flush();它是将程序缓存中的数据强制'移动'到浏览器。
比如这段代码:
我们期待的是浏览器在第一秒显示0,第二秒显示01,第三秒显示012,第四秒显示0123,第五秒显示01234,
但是 php手册中有这一段话:一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
所以讲上述 代码添加一行:echo str_repeat(" ",1024);// 重复输出1024个空格
此时即可达到要求
我们产生静态页面时,步骤:
ob_start();
输出内容
输出内容
输出内容
即生成了xxx.html静态页面。
再次浏览时可先判断该文件是否存在,如果存在就进行跳转或者直接输出页面即可。。
至于ob实现的页面静态化的弊端,首先就是他的实时性比较差,其次,若生成了过多的静态页面,则会对服务器的硬盘带来压力而且不利于静态页面的搜索。最好是将静态页面按年月日进行文件夹的归类,这样能够更快的查找到所需的静态页面。
对于用户较多的网站,缓存生成的静态页面有时候会减少百万次千万次的数据库访问,浏览速度的提升效果立竿见影。
php中的out_put buffering,简称ob技术,是一个生成静态页面比较简单的方法。
里面主要的函数有:
ob_start(); // 开启输出缓存; ob_get_contents(); //得到ob中的缓存内容 ob_clean(); //清空ob中的内容,不关闭ob缓存; ob_end_clean(); //清空ob中的内容,并关闭ob缓存; ob_flush(); //将ob中的内容'移动'到程序缓存,不关闭ob缓存; ob_end_flush(); //将ob中的内容移动到程序缓存,并关闭ob缓存;
举例:
此时浏览器输出123,a.html中的内容为123
<?php ob_start(); echo 1; echo 2; ob_flush(); echo 4; $content = ob_get_contents(); file_put_contents('a.html',$content); ?>
此时浏览器输出124,a.html中的内容为4 //ob_flush()将ob中的内容移动到程序缓存,而ob并未关闭,所以a.html中的内容为4
假设php开启了ob,则其先将输出显示的数据缓存到ob中,当程序执行结束或者ob_flush()后,ob中的内容会'移动'到程序缓存,最后程序缓存反馈给浏览器进行显示
也就是ob---->程序缓存------>浏览器,但如果ob中途被关闭的话,输出的数据则会直接缓存到程序缓存中。
至于flush();它区别于ob_flush();它是将程序缓存中的数据强制'移动'到浏览器。
比如这段代码:
<?php for($i = 0 ;$i< 5;$i++){ echo $i; flush(); sleep(1); } ?>
我们期待的是浏览器在第一秒显示0,第二秒显示01,第三秒显示012,第四秒显示0123,第五秒显示01234,
但是 php手册中有这一段话:一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
所以讲上述 代码添加一行:echo str_repeat(" ",1024);// 重复输出1024个空格
<?php echo str_repeat(" ",1024); for($i = 0 ;$i< 5;$i++){ echo $i; flush(); sleep(1); } ?>
此时即可达到要求
我们产生静态页面时,步骤:
ob_start();
输出内容
输出内容
输出内容
$content = ob_get_contents(); ob_end_clean(); file_put_contents('xxx.html',$content);
即生成了xxx.html静态页面。
再次浏览时可先判断该文件是否存在,如果存在就进行跳转或者直接输出页面即可。。
至于ob实现的页面静态化的弊端,首先就是他的实时性比较差,其次,若生成了过多的静态页面,则会对服务器的硬盘带来压力而且不利于静态页面的搜索。最好是将静态页面按年月日进行文件夹的归类,这样能够更快的查找到所需的静态页面。
相关文章推荐
- 使PHP页面静态化技术,php动态页面转html静态页面
- 利用PHP的ob函数实现生成静态化页面
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)
- php-ob缓存实现页面静态化
- php利用ob缓存机制实现页面静态化方法全解
- 使用ob系列函数实现PHP网站页面静态化
- PHP页面静态化技术(备忘)
- PHP页面静态化技术
- 使PHP页面静态化技术,php动态页面转html静态页面
- 利用php的ob缓存机制实现页面静态化
- php的ob实现页面静态化
- php页面静态化技术;学习笔记
- 利用php的ob缓存机制实现页面静态化
- 使PHP页面静态化技术,php动态页面转html静态页面
- 利用php的ob缓存机制实现页面静态化方法
- 传智陈力 PHP培训.第二版PHP视频教程.陈力.大型门户网站核心技术-页面静态化.页面静态化教程简介
- PHP页面静态化技术(备忘)
- 使用ob系列函数实现PHP网站页面静态化
- PHP页面静态化技术
- PHP文件缓存技术之页面静态化