利用 ob_flush() + flush() 強制將輸出緩衝區內容提前送達瀏覽器,無需等待整頁渲染完成。將頁面拆分為多個獨立區塊,優先輸出 <head>(CSS/JS)、再依序輸出內容區塊,使用者能最快看到畫面框架。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Big Pipe Demo</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style>body{margin:0;background:#CCC} p{text-align:center;margin:10px} img{width:450px}</style>
</head>
<?php cache_flush(); ?>
<body>
<p><img src="https://image.tianjimedia.com/uploadImages/2013/240/5CPOE4UZ2T40.jpg"></p>
<?php cache_flush(); ?>
<p><img src="https://image.tianjimedia.com/uploadImages/2013/240/6893CY9XEQD1.jpg"></p>
<?php cache_flush(); ?>
<p><img src="https://image.tianjimedia.com/uploadImages/2013/240/83H52SG02V32.jpg"></p>
</body>
</html>
<?php
function cache_flush($sec = 1) {
ob_flush();
flush();
usleep($sec * 1000000); // 模擬後端處理延遲
}
?>
<head> 並優先 flush,避免頁面閃爍。ob_flush() 清 PHP 輸出緩衝,flush() 推送至 Web Server/瀏覽器,兩者缺一不可。gzip 或設定 proxy_buffering off,否則可能緩衝導致無效果。<link rel="preload">、prefetch 預載關鍵資源。flush()、Yii renderPartial、ThinkPHP display 等均支援分塊輸出模式。BigPipe 以極低成本(幾行代碼)顯著提升用戶感知效能。掌握 ob_flush/flush 機制與 Web Server 緩衝行為,即可在傳統 PHP 架構下實現現代化的流式渲染體驗。