快取(Caching)
Yii 支援不同的快取機制。下面我們說明如何處理常見的快取問題。
1. 使用APC套件實做 PHP 變數快取
在 Yii config裡面設置快取套件,這邊我們使用 ApcCache:
'cache' => [
'class' => 'yii\caching\ApcCache',
],
之後,我們就可以使用快取了,方法如下:
$key = 'cacheKey'
//取得快取資料
$data = Yii::$app->cache->get($key);
if ($data === false) {
// $data不在快取裡面,重新計算資料
// 儲存$data,這樣下次就可以從快取裡面取得了
$cache->set($key, $data);
}
如果收到Call to undefined function yii\caching\apc_fetch()
錯誤,代表 APC 套件安裝有問題。請參考 PHP APC manual 找出問題點。
如果快取沒有生效($data 總是 false
),可以檢查php.ini
的 apc.shm_size
參數。有可能是資料的大小超過該參數允許的大小。
2. 用於靜態資源的 HTTP 快取
如果沒有指定靜態資源的過期時間 (像是.js
、.css
……等等),網頁存取的速度可能會變得非常慢。Chrome的 PageSpeed Insights
指定過期時間未指定
(expiration not specified)是Yii網頁效率的重要問題。PageSpeed Insights 會建議我們使用瀏覽器快取功能
(Leverage browser caching)。我們可以在 asset manager 加上這段程式碼以改善這個問題:
return [
// ...
'components' => [
'assetManager' => [
'appendTimestamp' => true,
],
],
];