首頁 後端開發 php教程 PHP实时输出报文到浏览器_PHP教程

PHP实时输出报文到浏览器_PHP教程

Jul 13, 2016 pm 05:48 PM
head html php yahoo 最佳化 前端 即時 實踐 瀏覽器 輸出

Yahoo的前端优化实践中有一条是先把html里的

部分先输出(Flush the Buffer Early),这样做浏览器得到head后能先下载head里的css/js文件,而不用等到整个html下载完了才去下载head里的css/js,从而提高网页打开的速度。
 
http1.1里增加了一个Transfer-Encoding: chunked报头,这个报头的作用可以把报文分成多块输出。
 
报文的格式如下:
Java代码 
  Chunked-Body = *chunk  
         "0" CRLF  
         footer  
         CRLF   
  chunk = chunk-size [ chunk-ext ] CRLF  
      chunk-data CRLF  
  hex-no-zero =   
  chunk-size = hex-no-zero *HEX  
  chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )  
  chunk-ext-name = token  
  chunk-ext-val = token | quoted-string  
  chunk-data = chunk-size(OCTET)  
  footer = *entity-header 
 
  Chunked-Body = *chunk
         "0" CRLF
         footer
         CRLF
  chunk = chunk-size [ chunk-ext ] CRLF
      chunk-data CRLF
  hex-no-zero =
  chunk-size = hex-no-zero *HEX
  chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )
  chunk-ext-name = token
  chunk-ext-val = token | quoted-string
  chunk-data = chunk-size(OCTET)
  footer = *entity-header
CRLE:回车换行(\r\n)
例如:
Java代码 
...                          #很多报头  
Transfer-Encoding: chunked   #报头2个CRLE后开始报文  
                               
1                            #chunk的大小,十六进制,然后加个CRLE  
a                            #chunk数据,然后加个CRLE  
4                            #chunk的大小,十六进制,然后加个CRLE  
test                         #chunk数据,可以不断循环分块输出,然后加个CRLE  
0                            #chunk结束,0 + 2个CRLE 
 
...                          #很多报头
Transfer-Encoding: chunked   #报头2个CRLE后开始报文
                            
1                            #chunk的大小,十六进制,然后加个CRLE
a                            #chunk数据,然后加个CRLE
4                            #chunk的大小,十六进制,然后加个CRLE
test                         #chunk数据,可以不断循环分块输出,然后加个CRLE
0                            #chunk结束,0 + 2个CRLE
 
 
 
在php里使用ob_flush后,将自动加上Transfer-Encoding: chunked报头实现分块输出,但是在使用过程中经常达不到效果。不得不考虑一些问题
 
一、php的缓冲区
如果你的php是以apache模块运行,那请使用flush函数来通知php输出。如果是以fastcgi模式运行则使用ob_flush通知php。这时gzip将失效,Chunked方式不支持每块都独立压缩。只能全部输出压缩后,将压缩包分块输出。为了保证兼容性,先调用ob_flush,再调用flush。
 
二、浏览器的缓冲区
当遇到Transfer-Encoding: chunked报头后,浏览器做什么反应,这个还是要看浏览器的实现了。在我的实验中,firefox不管chunk数据大小都会做实时显示,而ie8和chrome则需要一定长度后才显示。所以,需要先输出一定的大小后某些浏览器才有效果。
 
三、反向代理服务器
你使用的反向代理服务器支持http1.1协议吗?它是怎么处理后端是chunked方式的?proxy缓冲没满之前遇到chunked会按照后端来输出吗?
 
nginx的proxy功能只支持http1.0,并且它只有proxy buffer满了才会输出。
 
四、FastCGI缓冲
如果以FastCGI模式运行,可能Web Server有自己的fastcgi缓冲,等待缓冲满了才输出(nginx就这样)。flush函数只能通知php的output缓冲输出

Chunked transfer encoding
Hypertext Transfer Protocol -- HTTP/1.1 Chunked transfer encoding
深入理解ob_flush和flush的区别

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478424.htmlTechArticleYahoo的前端优化实践中有一条是先把html里的head部分先输出(Flush the Buffer Early),这样做浏览器得到head后能先下载head里的css/js文件,而不用等...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

芝麻開門官網網站 芝麻開門app最新進入網址 芝麻開門官網網站 芝麻開門app最新進入網址 Feb 28, 2025 am 11:18 AM

芝麻開門官網網站 芝麻開門app最新進入網址

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

您如何在PHP中解析和處理HTML/XML?

最新版芝麻開門官網入口 gate.io官網鏈接地址入口 最新版芝麻開門官網入口 gate.io官網鏈接地址入口 Feb 28, 2025 am 11:21 AM

最新版芝麻開門官網入口 gate.io官網鏈接地址入口

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

php程序在字符串中計數元音

gate.io芝麻開門下載中文教程 gate.io芝麻開門下載中文教程 Feb 28, 2025 am 10:54 AM

gate.io芝麻開門下載中文教程

芝麻開門交易所官方網址 gate.io交易所官網入口 芝麻開門交易所官方網址 gate.io交易所官網入口 Feb 28, 2025 am 10:45 AM

芝麻開門交易所官方網址 gate.io交易所官網入口

See all articles