php 实现BigPipe分块输出

php 实现BigPipe分块输出

原理:利用 ob_flush() 与 flush() 将缓冲区的内容提前输出,浏览器可提早加载这部分的内容,无需等待所有输出完成再加载。

将页面内容划分为一个个小块,输出一个后再输出下一个,使用户可尽早看到页面内容,优化用户体验。


首先 head 的内容应该优先加载,尽早加载css,javascript等静态内容,因此在head之后应该用 flush()输出。


例子:先输出head 静态内容,再将每个<p>分为一个chunk,每隔一秒输出。

[php] view plaincopyprint?

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3.  <head>  
  4.   <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  5.   <title> Big Pipe </title>  
  6.   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>  
  7.   <style type="text/css">  
  8.   body{margin:0px; background:#CCCCCC;}  
  9.   p{text-align:center; margin:10px;}  
  10.   img{width:450px;}  
  11.   </style>  
  12.  </head>  
  13.  <?php cache_flush() ?>  
  14.  <body>    
  15.   <p><img src="http://image.tianjimedia.com/uploadImages/2013/240/5CPOE4UZ2T40.jpg"></p>  
  16.   <?php cache_flush(); ?>  
  17.   <p><img src="http://image.tianjimedia.com/uploadImages/2013/240/6893CY9XEQD1.jpg"></p>  
  18.   <?php cache_flush(); ?>  
  19.   <p><img src="http://image.tianjimedia.com/uploadImages/2013/240/83H52SG02V32.jpg"></p>  
  20.  </body>  
  21. </html>  
  22. <?php  
  23. function cache_flush($sec=1){  
  24.     ob_flush();  
  25.     flush();  
  26.     usleep($sec*1000000);  
  27. }  
  28. ?>  


需要注意的问题:
1.尽量利用一次输出输出尽可能多的内容。
2.尽量可以同步加载。
3.chunk不是分得越多越好,要看实际需求情况决定。
4.ob_flush() 与 flush() 要同时使用,因有些情况flush()会没有效果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值