php的页面静态化技术 ob(out_put buffering)

在大型网站中,例如首页面,新闻页面等一些经常访问,但数据却基本不变的页面大部分都是.html页面(静态页面),静态页面相对于动态页面,不仅能使网页的浏览速度提升N多倍,而且利于网站的seo。

对于用户较多的网站,缓存生成的静态页面有时候会减少百万次千万次的数据库访问,浏览速度的提升效果立竿见影。

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实现的页面静态化的弊端,首先就是他的实时性比较差,其次,若生成了过多的静态页面,则会对服务器的硬盘带来压力而且不利于静态页面的搜索。最好是将静态页面按年月日进行文件夹的归类,这样能够更快的查找到所需的静态页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值