- 作(zuò)者:admin
- 發表時(shí)間(jiān):2013-07-02 14:17:17
- 來(lái)源:未知
在當前 PHP 版本的默認配置下,“輸出緩沖(Output Buffering)”是被打開(kāi)的。舊(jiù)版本則不是這樣,在舊(jiù)版本的 PHP 中,字符串在每次被輸出的時(shí)候(通(tōng)過 echo 或 print 函數(shù)),都會(huì)觸發一次發送到客戶端浏覽器(qì)的動作(zuò)。
“輸出緩沖”的引入,使得(de)這一過程更加快速、更加高(gāo)效。緩沖區(qū)實際上(shàng)是在內(nèi)存中開(kāi)辟了一塊區(qū)域,可(kě)以認為(wèi)是內(nèi)存中的一個(gè)大(dà)的字符串。當程序中有(yǒu)字符要輸出的時(shí)候,會(huì)把要輸出的內(nèi)容附加到該緩沖區(qū)中,用來(lái)替代舊(jiù)版本 PHP 中每次都直接輸出到浏覽器(qì)的方式。當緩沖區(qū)被“刷新”的時(shí)候,再統一輸入到用戶浏覽器(qì)。以下幾種情況下,會(huì)引起緩沖區(qū)的“刷新”操作(zuò):
1、PHP 程序執行(xíng)完畢;
2、緩存區(qū)的大(dà)小(xiǎo)超過了 php.ini 配置文件中設置的 output_buffering 值;
3、flush() 或者 ob_flush() 函數(shù)被調用的時(shí)候。
在實際的産品環境下,我們可(kě)以通(tōng)過在 head 标簽後馬上(shàng)刷新 PHP 的緩沖區(qū),來(lái)達到加速你(nǐ)的站(zhàn)點的目的,示例代碼如下:
Buffer flushing in action
...
(如果你(nǐ)的站(zhàn)點在使用 WordPress,你(nǐ)應該把類似的代碼放在你(nǐ)的 WordPress 模闆的 header.php 文件中。)
接下來(lái)來(lái)解釋上(shàng)述代碼的作(zuò)用:
當浏覽器(qì)接收到頁面 head 部分的代碼的時(shí)候,就可(kě)以開(kāi)始下載 head 段中的包括的資源了,類似 CSS 文件、站(zhàn)點收藏圖标(Favicon)等。這些(xiē)內(nèi)容的下載可(kě)以與浏覽器(qì)接受 body 段的內(nèi)容時(shí)的時(shí)間(jiān)同步進行(xíng)。
具體(tǐ)能加速多(duō)少(shǎo),需要因地制(zhì)宜。這取決于很(hěn)多(duō)客觀條件,包括服務端的響應速度、你(nǐ)的頁面大(dà)小(xiǎo)、你(nǐ)的 CSS 文件大(dà)小(xiǎo)和(hé)數(shù)量、浏覽器(qì)是否有(yǒu)本地緩存等等。因素固然有(yǒu)很(hěn)多(duō),不過這樣一個(gè)小(xiǎo)小(xiǎo)的優化,就可(kě)以顯而易見的為(wèi)你(nǐ)的站(zhàn)點加速,何樂而不為(wèi)呢?
我很(hěn)希望各位把這個(gè)小(xiǎo)技(jì)巧運用在自己網站(zhàn)上(shàng),并跟蹤所産生(shēng)的實際效果。期待大(dà)家(jiā)的反饋。
原文作(zuò)者:Craig Buckler ,原文地址:http://blogs.sitepoint.com/2010/10/29/faster-web-pages-php-buffer-flush/
[本文摘自:翻譯:avenger]