將動態生成的頁面內容儲存為靜態檔案,後續請求直接讀取檔案,跳過資料庫查詢、模板渲染等運算,大幅提升回應速度。類似快取機制,但由應用層主動控制。
ob_start() 緩衝)。cache/article_123.html)。<?php
function serve_cached($cache_file, $dependencies, $generator) {
// $dependencies: 相依檔案路徑陣列
// $generator: 回傳頁面內容字串的 callable
if (!file_exists($cache_file)) {
$content = $generator();
file_put_contents($cache_file, $content);
echo $content;
return;
}
$cache_mtime = filemtime($cache_file);
foreach ($dependencies as $dep) {
if (file_exists($dep) && filemtime($dep) > $cache_mtime) {
// 相依檔案已更新,重建
$content = $generator();
file_put_contents($cache_file, $content);
echo $content;
return;
}
}
// 直接輸出緩衡
readfile($cache_file);
}
// 使用範例
serve_cached(
'cache/article_123.html',
['templates/article.tpl', 'lib/db.php'],
function() {
// 這裡執行原本的動態邏輯,回傳 HTML 字串
ob_start();
include 'render_article.php'; // 內部使用 $article 資料渲染
return ob_get_clean();
}
);
?>
flock) 避免多進程同時寫入。頁面緩衡是「以空間換時間」的經典技巧。現代框架 (Laravel, Symfony) 皆內建強大快取抽象層,建議優先使用框架提供機制;自行實作時務必處理好失效、並發、分散式一致性問題。