0

0

PHP实现BigPipe分chunked输出_PHP教程

php中文网

php中文网

发布时间:2016-07-13 17:48:35

|

1202人浏览过

|

来源于php中文网

原创

在Yahoo系的最佳实践里,建议把静态的内容尽早的输出,在head之后就调用flush,让浏览器可以尽早去加载静态资源,包括脚本、样式、图片(javascipt,css,image一般是外链的形式)等等,后台如果有多个数据源或者api需要调用,尽可能做到完成一个输出一个,通过js在前端拼装页面,进而达到优化用户体验的效果,用户等待的时间,是木桶最短的那快木板。
下面是引用:
Flush the Buffer Early
tag: server
When users request a page, it can take anywhere from 200 to 500ms for the backend server to stitch together the HTML page. During this time, the browser is idle as it waits for the data to arrive. In PHP you have the function flush(). It allows you to send your partially ready HTML response to the browser so that the browser can start fetching components while your backend is busy with the rest of the HTML page. The benefit is mainly seen on busy backends or light frontends.
A good place to consider flushing is right after the HEAD because the HTML for the head is usually easier to produce and it allows you to include any CSS and JavaScript files for the browser to start fetching in parallel while the backend is still processing.
Example:
 
      ...
   
    php flush(); ?>
   


      ...
Facebook提出的BigPipe技术,将这种思想有了更具体的实现,大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行。
在php下做个小测试,
 
';ob_flush();flush();sleep(2);echo "b";?>
结果可以看到在ie下(7,8),不管输出内容的大小,都可以看到效果,“b“在2秒后输出,在firefox和chrome,两段文本都在2秒后展现,说明浏览器做了缓存,经过实验,缓存的大小为1024,刚好1k,也是浏览器做的优化。通过返回头可以看出,在分段输出的时候,返回包没有经过gzip。
 
通过wireshark可以看到后台输出确实是一个个chunked过来的,看来是浏览器做了工作,猜测:缓存大小应该是1024B或者MTU大小(1400B多点,看网络情况),首段输出增大到1024的时,chrome和firefox都开始正常表演了,页面里的js、css和图片在第一段下载完已经开始加载。
 
应该思考的问题:
1、传输效率,尽量利用一次传输传送尽量多的东西,根据MTU大小调整;
2、同步加载,第一块送过来的东西,尽量可以同步加载,需要注意不同浏览器可以同步加载域名的数量,需要考虑javascript对加载的block,对于不用立刻执行的内容,可以通过加defer或者干脆注释掉,等页面完成在eval进来;
3、适用范围,任何一个技术都有自己适用的场景,对于后台需要访问多个api的应用会更适合一些,像社交类的网站,搜索之类的本来就在100ms左右就展现完毕,纯玩儿技术就没意义了,chunked也不是分的越多越好,适当的,类似的最好合并起来;
4、ob_flush和flush最好结对使用,某些情况下,当用flush是没有效果的。
 
参考:
 
http://www.BkJia.com/kf/201202/118114.html
 
http://developer.yahoo.com/performance/rules.html#flush
 
http://www.BkJia.com/kf/201202/118116.html
 
http://www.BkJia.com/kf/201202/118117.html
 
http://baike.baidu.com/view/4601904.htm
 
http://www.BkJia.com/kf/201202/118118.html

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478421.htmlTechArticle在Yahoo系的最佳实践里,建议把静态的内容尽早的输出,在head之后就调用flush,让浏览器可以尽早去加载静态资源,包括脚本、样式、图片(...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号