thinkphp的靜態緩存是指將訪問的每個頁面按照一定的規則緩存起來,下一次訪問時直接讀取相應的緩存,這樣就能加快訪問速度。
靜態緩存與生成靜態類似,區別在於生成靜態後要更新內容必須重新生成,但是靜態緩存可以在設置的緩存時間超出後自動重新生成緩存,緩存時間重新計算,這樣就既能減小服務器解析模板的壓力,又同時能自動更新。
靜態緩存與完全靜態在訪問速度方面相比稍微慢一點,但與不打開靜態緩存就有天壤之別了。
當被緩存的頁面html結構改變的時候,會馬上重新生成緩存(注意是html結構),後端傳過來的數據量增減不會重新去生成緩存文件
tp的開啓靜態緩存這裏就不說了,自己去看官方文檔
tp只要生成了靜態頁面且靜態頁面還沒過期,再次訪問數據的時候就會訪問靜態頁面,不需要我們做什麼其他操作。
接下來實例說話:
tp配置 根據你自己的實際情況配置
//靜態緩存
'HTML_CACHE_ON' => true, // 開啓靜態緩存
'HTML_CACHE_TIME' => 60, // 全局靜態緩存有效期(秒)
'HTML_FILE_SUFFIX' => '.php', // 設置靜態緩存文件後綴
'HTML_PATH' => './Application/html',//靜態緩存文件目錄,HTML_PATH可任意設置,此處設爲當前項目下新建的html目錄
'HTML_CACHE_RULES'=>[ //緩存規則
'dbcurd:'=>['{:module}_{:controller}_{:action}',60,'md5'],
'testCatch:'=>['{:action}_{code}',30],
],
controller類
namespace Home\Controller;
use Think\Controller;
class TestCatchController extends Controller{
public function index(){
if(IS_GET){
echo 'hhhhh';
}
//數據量大的時候就是體現出靜態緩存的作用
// $arr=[];
// for($i=0;$i<500000;$i++){
// $arr[]=[
// 'i'=>$i,
// 'name'=>'czh'.$i,
// 'age'=>26,
// ];
// }
//
// $this->assign('arr',$arr);
//小數據量
$message=[
'name'=>'czh',
'age'=>26,
'habby'=>'basketball',
'habby2'=>'basketball',
];
$this->assign('message',$message);
$this->display();
}
}
html頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--<volist name="arr" id="vo">-->
<!--<div><{$vo.i}>----<{$vo.name}>----<{$vo.age}></div>-->
<!--</volist>-->
<ul>
<volist name="message" id="vo">
<li><{$vo}></li>
</volist>
</ul>
</body>
</html>
當第一次訪問的時候 ,生成靜態文件,如果設置的過期時間,在沒超過過期時間裏面無論怎麼刷新頁面,都是讀取緩存文件。(後臺的數組內容無論怎麼增減都會讀取緩存文件)。當過期時間到的時候,再刷新頁面就會重新生成緩存頁面。
還有一種情況會在還沒到過期時間的時候去重新生成緩存文件,就是html頁面發生變化的時候(添加了新元素等)。
大家可以自己去嘗試下。