BigPipe理解及用法

关于BigPipe在通过我看关于缓存的一些知识时碰见的一个技术,

该技术可以这么说,逐步式的加载页面,跟ajax渲染页面有些类似,首先来说说两者的区别,

      Ajax : 在页面加载完成后或加载中时,去渲染页面,造成给页面感觉上来说 是一块一块显示出来的,

                  但是请求的io就比较多了,请求一次然后拿回来渲染,  这个ajax也会影响百度收录~关于SEO的知识。

   BigPipe : 他的理念“你可以把一整个页面的加载分成一个一个的小块,逐步展示在页面”,比如说在做蛋糕的时候 并不是 我整个做完后交付给客户,而是我做好一块就交给客户一块,而每一块我可以自己定制,这样在客户体验上跟ajax差不多,但是在请求上实际就请求了一次而已, 下面我们就简单做下demo!

这只是我写的一个原生的小demo,BigPipe是facebook发明的技术,具体要我们应用到各种框架还是考自己摸索下~

ob_start(); 开始缓冲区

ob_flush();将php执行过的 发送给nginx或apache

flush();然后在发给客户展示

ob_end_clean(); 关闭内部缓冲区,清除内部缓冲区内容

ob_get_length()l; 获取内部缓存区长度

ob_end_flush();发送内部缓存内容到浏览器,并关闭内部缓冲区

 改buffer是有一个大小的,所以我在这填充下字符,以达到效果 才能有那种分割显示的效果!

我们首先需要把Nginx版本升级到了1.7.8。

加上   header('X-Accel-Buffering: no');

就可以不用关闭 buffer大小了,  就不用去填充字符了。

<?php
 header('X-Accel-Buffering: no');
//在开始 我们需要打开缓冲
ob_start();
//接下来我们开始执行页面加载,

echo str_pad('world', 10000, ' ');

    sleep(2);//这里我们做一个延迟来更好的展示效果
    ob_flush();//这里将我们php执行过的东西 发送给apache或nginx

echo str_pad('world1', 10000, ' ');

    sleep(2);//这里我们做一个延迟来更好的展示效果
    ob_flush();//这里将我们php执行过的东西 发送给apache或nginx
	
echo str_pad('world2', 10000, ' ');

    sleep(2);//这里我们做一个延迟来更好的展示效果
    ob_flush();//这里将我们php执行过的东西 发送给apache或nginx
    flush();//然后这里apache或nginx发送给客户展示
 
    //展示完毕后我们需要清楚缓存区,关闭
    ob_end_clean();
?>

到这里就完毕了, 在付一个流程图~

php把数据请求好,暂存到php buffer,等缓存好了,在发送给tcp buffer 也就是nginx跟apache 这边处理完,发送给client browers 处理就可以了~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值