Yii2片段快取詳解
阿新 • • 發佈:2019-01-31
概述
這裡只是簡單講一下用法,如果想更詳細的瞭解,去看 官方手冊 比較好。
片段快取指的是快取頁面內容中的某個片段。例如,一個頁面顯示了逐年銷售額的摘要表格, 可以把表格快取下來,以消除每次請求都要重新生成表格 的耗時。片段快取是基於資料快取實現的。
初試牛刀
片段快取主要在view
中使用
// ..../view/site/index.php頁面
<?php
if($this->beginCache('cache')) {
echo "<p class='cache'>這裡待會會被快取</p>";
$this->endCache();
}
echo "<p class='no_cache'>這裡不會被快取</p>";
?>
和資料快取一樣,每個片段快取都需要一個唯一的名稱。
過期時間
// ..../view/site/index.php頁面
<?php
$duration = 15; // 設定過期秒數
if($this->beginCache('cache' , ['duration' => $duration])) {
echo "<p class='cache'>這裡待會會被快取</p>";
$this->endCache();
}
echo "<p class='no_cache'>這裡不會被快取</p>";
?>
依賴關係
和資料快取一樣,片段快取的內容一樣可以設定快取依賴。例如 一段被快取的文章,是否重新快取取決於它是否被修改過。不過具體寫法上略有不用。
// ..../view/site/index.php頁面
<?php
$dependency = [ // 這裡用檔案依賴舉例
'class' => '\yii\caching\FileDependency',
'fileName' => 'robots.txt'
];
if($this->beginCache('cache' , ['dependency' => $dependency])) {
echo "<p class='cache'>這裡待會會被快取</p>";
$this->endCache();
}
echo "<p class='no_cache'>這裡不會被快取</p>";
?>
當對應依賴檔案被修改時,快取也被取消。
快取開關
有時你可能只想在特定條件下開啟片段快取。
// ..../view/site/index.php頁面
<?php
$enabled = false; // true[開啟]|false[關閉]
if($this->beginCache('cache' , ['enabled' => $enabled])) { // 該片段程式碼可以說無效
echo "<p class='cache'>這裡待會會被快取123</p>";
$this->endCache();
}
echo "<p class='no_cache'>這裡不會被快取</p>";
?>
快取巢狀
片段快取可以被巢狀使用。一個片段快取可以被另一個包裹。不過要注意的是外層的失效時間應該短於內層,外層的依賴條件應該低於內層,以確保最小的片段,返回的是最新的資料。
// ..../view/site/index.php頁面
<?php
if($this->beginCache('cache')) {
// ...在此生成內容...
if ($this->beginCache('cache')) {
// ...在此生成內容...
$this->endCache();
}
// ...在此生成內容...
$this->endCache();
}
?>
由於用法都一樣,這裡就不做詳細演示。