用php实现BigPipe

bigpipe的简单php实现:

<!doctype>
<html>
<head>
	<meta charset="utf-8" />
	<title>php实现BigPipe</title>
</head>
<style>
</style>
<body>
	<div class="wrapper">
		<hr>
		<div class="section" id="con1">内容1,正在加载……</div>
		<hr>
		<div class="section" id="con2">内容2,正在加载……</div>
		<hr>
		<div class="section" id="con3">内容3,正在加载……</div>
		<hr>
	</div>
	<?php
		/*
		 * 输出缓存区
		 */
		function flush_now(){
			ob_flush();
			flush();
		}
		flush_now();
	?>
	<?php sleep(2);?>
		<script>
			document.getElementById("con1").innerHTML="====内容1====";
		</script>
	<?php flush_now()?>
 
	<?php sleep(2);?>
		<script>
			document.getElementById("con2").innerHTML="====内容2====";
		</script>
	<?php flush_now()?>
 
	<?php sleep(2);?>
		<script>
			document.getElementById("con3").innerHTML="====内容3====";
		</script>
	<?php flush_now()?>
</body>
</html>

最后,别忘了修改php.ini的:
output_buffering=4096

4 Comments

  • test
    2012 年 05 月 16 日 - 上午 10:54 | Permalink

    这个可不一样吧。 这只是针对了同一资源啊。
    如果推送到对应的js 处理, 就好了。 这个明显太慢。。。

    • jkl
      2012 年 05 月 17 日 - 上午 1:54 | Permalink

      BigPipe解决的是一个页面需要多个ajax请求加载慢,使整体相应变慢的问题,当然是“针对了同一资源”啦,不知道“推送到对应的js 处理”是什么意思?

  • iorichina
    2012 年 07 月 04 日 - 上午 7:16 | Permalink

    请教我的为什么无法实现呢,nginx,都是完全准备好数据之后一起输出的,copy你的代码,iorichina@163.com

    • admin
      2012 年 07 月 05 日 - 上午 2:04 | Permalink

      印象中,需要打开服务器的“keep-alive”,在apache的http.conf里是“KeepAlive On”,你可以找找nginx中的对应配置。另外,别忘了php.ini里的“output_buffering=4096”
      —–希望对你有帮助

  • 发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注

    *

    *