关于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 处理就可以了~