一、output_buffering是什麼?
output_buffering是PHP中的一個功能,用於延遲輸出。通俗一點說,就是將所有要輸出的內容先存起來,等到後面定義了buffer大小或到了代碼結束時再一次性輸出。
我們可以使用ob_start()和ob_flush()來開始和結束output_buffering,ob_get_contents()用於獲取緩存中的內容。
二、output_buffering的優缺點
output_buffering的優點有:
1、可以將輸出長的html代碼或是動態內容緩存起來,方便處理。
2、能夠提高web server與瀏覽器之間的速度。
3、可以將錯亂的輸出緩存起來,直到程序很明確地說要清除為止。
4、減少了由於不必要的echo語句所引起的開銷。
而缺點主要包括:
1、會造成一定的性能損失。
2、可能會導致一些控制字符的錯誤輸出。
3、在錯誤輸出時難以調試。
三、使用output_buffering的場景
1、在自定義MVC框架中,使用output_buffering可以方便的收集控制器中的視圖文件,最終輸出時再統一調用。
2、在生成PDF等需要大量HTML的內容時,使用output_buffering可以較為方便的管理生成內容。
3、在頁面調試時,當我們在header或body中已經有輸出時,可以使用output_buffering來控制後續輸出的位置,避免出現錯誤。例如:
<?php ob_start(); header('Content-Type: text/html; charset=UTF-8'); echo '測試緩存輸出 '; echo ''; $content = ob_get_contents(); ob_clean(); echo ''.htmlspecialchars($content).'';
echo $content;
echo '緩存輸出結果
這裡是要緩存的測試輸出結果
';
echo '';
ob_flush();
?>四、使用output_buffering的技巧
1、按需使用,儘可能地避免造成性能瓶頸。
2、在script或style標籤中只使用echo語句輸出值,不要將整個標籤放在output_buffering中。
3、在使用output_buffering時,盡量保持代碼的清晰和易於維護。較大的緩存空間可能需要通過定義一個字符串來擴展,而不是直接輸出。
4、在使用output_buffering時,注意是否會受到共享主機的限制。共享主機按照服務器的PHP.ini的限制來設置buffer大小,若超出限制可能會出現問題。
五、output_buffering與gzip壓縮
output_buffering與gzip壓縮是可以一起使用的,它們之間並不衝突,gzip壓縮可以幫助減少經過HTTP協議傳輸的數據體積。
我們可以定義一個compress_output函數,通過ob_start和ob_end_flush來達到輸出gzip壓縮數據的目的,代碼如下:
原創文章,作者:ZLYR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137642.html