在當前 PHP 版本的默認配置下,「輸出緩衝(Output Buffering)」是被打開的。舊版本則不是這樣,在舊版本的 PHP 中,字符串在每次被輸出的時候(經過 echo 或 print 函數),都會觸發一次發送到客戶端瀏覽器的動做。php
「輸出緩衝」的引入,使得這一過程更加快速、更加高效。緩衝區其實是在內存中開闢了一塊區域,能夠認爲是內存中的一個大的字符串。當程序中有字符要輸出的時候,會把要輸出的內容附加到該緩衝區中,用來替代舊版本 PHP 中每次都直接輸出到瀏覽器的方式。當緩衝區被「刷新」的時候,再統一輸入到用戶瀏覽器。如下幾種狀況下,會引發緩衝區的「刷新」操做:css
一、PHP 程序執行完畢;html
二、緩存區的大小超過了 php.ini 配置文件中設置的 output_buffering 值;web
三、flush() 或者 ob_flush() 函數被調用的時候。瀏覽器
在實際的產品環境下,咱們能夠經過在 head 標籤後立刻刷新 PHP 的緩衝區,來達到加速你的站點的目的,示例代碼以下:緩存
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Buffer flushing in action</title> <link rel="stylesheet" type="text/css" href="styles.css" /> <link rel="shortcut icon" href="favicon.ico" /> </head> <?php // 這裏強制刷新緩衝區 flush(); ?> <body> ...
(若是你的站點在使用 WordPress,你應該把相似的代碼放在你的 WordPress 模板的 header.php 文件中。)函數
接下來來解釋上述代碼的做用:優化
當瀏覽器接收到頁面 head 部分的代碼的時候,就能夠開始下載 head 段中的包括的資源了,相似 CSS 文件、站點收藏圖標(Favicon)等。這些內容的下載能夠與瀏覽器接受 body 段的內容時的時間同步進行。網站
具體能加速多少,須要因地制宜。這取決於不少客觀條件,包括服務端的響應速度、你的頁面大小、你的 CSS 文件大小和數量、瀏覽器是否有本地緩存等等。因素當然有不少,不過這樣一個小小的優化,就能夠顯而易見的爲你的站點加速,何樂而不爲呢?spa
我很但願各位把這個小技巧運用在本身網站上,並跟蹤所產生的實際效果。期待你們的反饋。
原文做者:Craig Buckler ,原文地址:http://blogs.sitepoint.com/2010/10/29/faster-web-pages-php-buffer-flush/