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大小了, 就不用去填充字符了。
<?phpheader('X-Accel-Buffering: no');
//在开始 我们需要打开缓冲
ob_start();
//接下来我们开始执行页面加载,echo str_pad('world', 10000, ' ');sleep(2);//这里我们做一个延迟来更好的展示效果ob_flush();//这里将我们php执行过的东西 发送给apache或nginxecho str_pad('world1', 10000, ' ');sleep(2);//这里我们做一个延迟来更好的展示效果ob_flush();//这里将我们php执行过的东西 发送给apache或nginxecho str_pad('world2', 10000, ' ');sleep(2);//这里我们做一个延迟来更好的展示效果ob_flush();//这里将我们php执行过的东西 发送给apache或nginxflush();//然后这里apache或nginx发送给客户展示//展示完毕后我们需要清楚缓存区,关闭ob_end_clean();
?>
到这里就完毕了, 在付一个流程图~
php把数据请求好,暂存到php buffer,等缓存好了,在发送给tcp buffer 也就是nginx跟apache 这边处理完,发送给client browers 处理就可以了~
BigPipe理解及用法相关推荐
- python模块之HTMLParser之穆雪峰的案例(理解其用法原理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser之穆雪峰的案例(理解其用法原理) #http://www.cnblog ...
- string_view理解与用法(二)
以前写了<string_View理解与用法(一)>和<详解C++17下的string_view>,请参考. 本篇文章从string_view引入的背景出发,依次介绍了其相关的知 ...
- Promise async/await的理解和用法
Promise && async/await的理解和用法 为什么需要promise(承诺)这个东西 在之前我们处理异步函数都是用回调这个方法,回调嵌套的时候会发现 阅读性 和 调试 的 ...
- php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析
本文实例讲述了PHP5.5新特性之yield理解与用法.分享给大家供大家参考,具体如下: yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实 ...
- 对于EnterCriticalSection和LeaveCriticalSection的理解和用法
对于EnterCriticalSection和LeaveCriticalSection的理解和用法 2015年08月26日 11:58:08 阅读数:4966 线程锁的概念函数EnterC ...
- bind()、call()、apply()理解及用法
apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向),Function对象的方法,每个函数都能调用: 使用apply或call方法,其运行的上下文指向第 ...
- C# ManualResetEvent的理解和用法
ManualResetEvent是C#中一个比较常用的工具,可用于线程间通信,实现一种类似信号量的功能(不知道我这样描述是否恰当,有可能不是"类似",而"就是" ...
- Pytorch forward()的简单理解与用法
1.基本用法 在pytorch中,使用torch.nn包来构建神经网络,我们定义的网络继承自nn.Module类.而一个nn.Module包含神经网络的各个层(放在__init__里面)和前向传播方式 ...
- 汇编jmp指令的理解与用法
这篇文章是在学习过程中对于转移地址偏移地址的理解以及网上缺乏帮助理解计算转移地址偏移地址的前提下诞生的.初次写知识点分享,如有误,请指出多包含. JMP是在编写程序中经常使用的指令,它的功能是转移到指 ...
最新文章
- 【C 语言】指针数据类型 ( 野指针 | 避免野指针推荐方案 )
- java实现计算机图形学中点画线算法
- Unity架构有点乱
- ROS2 on android,ROS2 通过Debian安装ROS2
- java jdbc 传参_java – 将参数传递给JDBC PreparedStatement
- 算法导论 高频算法题 数据结构与算法之美
- Linux 完全卸载 MySQL
- mall商城 -小程序,h5和pc vue前后端分离
- matlab m文件开方,请问,在matlab里面如果输入开方号(根号)?如9的开方怎么写?
- Ubuntu老是提示系统内存空间不足---扩展内存方法
- 设置计算机关机时间快捷键,电脑怎么设定关机时间?
- 常用标点符号中英文对照表
- 互联网移动支付存在的安全风险和对策
- 状态机思路在嵌入式开发中的应用说明及注意事项(普罗米修斯中不少功能节点用了状态机的方法来写)
- [保护过保护] _EPROCESS 的 Protection 成员
- 小学计算机基础知识题目,小学信息技术基础知识复习题(清华版第三册)
- 项目管理的核心要素——时间、成本与质量
- 下载论坛源码GBK UTF8 BIG5分别是什么意思
- 如何在鼠标右键加入自定义电源计划(如关闭睿频降温) For Win10
- 推荐系统算法—协同过滤算法详解
热门文章
- SVM支持向量机的推导(非常详细)
- python演化博弈仿真_求教 matlab做三方演化博弈仿真
- Python学习记录-实战三、模拟12306火车票订票流程
- 米联客 ZYNQ/SOC 精品教程 S02-CH15 AXI_Lite 总线详解
- 【ICLR 2018图神经网络论文解读】Graph Attention Networks (GAT) 图注意力模型
- js数组遍历的十种方法
- js中遍历数组加到新数组_JS数组遍历的十二种方式
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物领养信息管理系统5gcp7
- 正弦稳态电路的LC串并联谐振
- SpringCloud - Spring Cloud Netflix 之 Zuul网关;路由(十一)