一棍厌、什么是動態(tài)語言靜態(tài)化
將現(xiàn)有的PHP等動態(tài)語言的邏輯代碼生成為靜態(tài)HTML文件悼粮,用戶訪問動態(tài)腳本重定向到靜態(tài)的HTML文件的過程秩铆。
對實時性不高的頁面
二砚亭、為什么要靜態(tài)化
- 動態(tài)腳本通常會做邏輯計算和數(shù)據(jù)查詢,訪問量越大殴玛,服務(wù)器壓力越大
- 訪問量大時可能造成CUP負(fù)載過高钠惩,數(shù)據(jù)庫服務(wù)器壓過大
- 靜態(tài)化可以減低邏輯處理壓力,降低數(shù)據(jù)庫服務(wù)器查詢壓力
三族阅、靜態(tài)化的實現(xiàn)方式
使用模板引擎smarty
利用ob系列函數(shù)
ob_start() 打開輸出控制緩存
ob_get_contents() 返回輸出緩沖區(qū)內(nèi)容
ob_clean() 清空輸出緩沖區(qū)
ob_end_flush() 沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
ob_start()
輸出到頁面的HTML代碼
ob_get_contents()
ob_end_flush()
fopen()寫入
可以判斷文件的inode修改時間篓跛,判斷是否過期,使用filectime函數(shù)
<?PHP
$id = $_GET['id'] ?? '';
$cache_name = md5(__FILE__) . '-' . $id . '.html';
$cache_lifetime = 3600;
if (filectime(__FILE__) <= filectime($cache_name)
&& file_exists($cache_name)
&& filectime($cache_name) + $cache_lifetime > time())
{
include $cache_name;
exit;
}
ob_start();
?>
<b>THIS IS MY SCRIPT123 id=<?=$id?></b>
<?php
$content = ob_get_contents();
ob_end_flush();
$handle = fopen($cache_name, 'w');
fwrite($handle, $content);
fclose($handle);