1. 程式人生 > >Yii2片段快取詳解

Yii2片段快取詳解

概述

這裡只是簡單講一下用法,如果想更詳細的瞭解,去看 官方手冊 比較好。

片段快取指的是快取頁面內容中的某個片段。例如,一個頁面顯示了逐年銷售額的摘要表格, 可以把表格快取下來,以消除每次請求都要重新生成表格 的耗時。片段快取是基於資料快取實現的。

初試牛刀

片段快取主要在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();
}
?>

由於用法都一樣,這裡就不做詳細演示。