作為php的開源框架,自然少不了對快取的支援。yii快取可以在不同的級別使用。在最低級別,可用來快取單個資料(資料快取)。往上一級,我們快取乙個由檢視指令碼生成的頁面片斷(片段快取)。在最高端別,可儲存整個頁面以便需要的時候直接從快取讀取。本文說明頁面快取的配置及實現效果;
實現分為2步;
1. 在config檔案加入快取元件.
'cache' => array (
'class' => 'system.caching.cfilecache',
'directorylevel' => 2,
class標識需要使用的快取媒介,用途比較廣的型別基本都有支援:
cmemcache: 使用 php memcache 擴充套件.
capccache: 使用 php apc 擴充套件.
cdbcache: 使用一張資料庫表來儲存快取資料。
cfilecache: 使用檔案來儲存快取資料。 特別適用於大塊資料(例如頁面)。
當然,yii也可以支援redis,需要裝乙個外掛程式:
本文例項使用的是檔案快取,對於檔案快取,快取到的位置為protected/runtime/;directorylevel設定快取檔案的目錄深度;如果快取頁面特別多,這個值需要設定大點,否則每個目錄下的頁面會很多;
2. 在要做快取的控制器裡定義過濾器。
public function filters() {
return array (
array (
'coutputcache + post, list',
'duration' => 3600,
'varybyparam' => array('id','page'),
'dependency' => array(
'class'=>'cdbcachedependency',
'sql'=>'select max(id) from me115_book',
coutputcache 是用於處理快取的類,如果只填'coutputcache',則控制器裡所有action都會通過快取過濾,定義'coutputcache + post, list',表示只對以下方法進行快取:actionpost, actionlist
duration 是快取的時間,單位是秒,
varybyparam 是指定一系列get引數名稱列表, 使用相應的值去確定快取內容的版本,即同乙個action用於區分是不同頁面的的引數,此處我以id和page來區分不同頁面。
除varybyparam以外,還可以採用其他的條件來區分頁面:
varybyexpression:指定快取內容通過自定義的php表示式的結果而變化
varybyroute:指定快取內容基於請求的路由不同而變化 (controller 和 action)
varybysession:指定是否快取內容. 因使用者session不同而變化
本例指定的是資料庫,通過資料表的某個值的變化來確定快取是否失效。例如,如果在表中新增了一條me115_book記錄,即使快取才過了2分鐘(<3600),仍然判斷為失效,從而查詢資料庫,生成整個頁面,再次快取;
檢查:
檢視當前頁面是否快取,可以dump輸出乙個當前伺服器時間,從而檢查當前頁面是否已快取;
優化效果:
優化站點為乙個部落格站點(me115.com),除了dns解析轉接外,未進行任何優化,優化前的資料為:
首位元組時間為842ms;
採用頁面快取之後的效果:
首位元組時間為376ms;html生成的時間大大縮短,後台時間減少了一倍。
posted by: 大cc | dec17,2012
部落格:cnblogs.com/me115/[訂閱]
進一步參考:
[1]
[2]
[3]
nginx快取配置例項
proxy buffer size 4k 設定 伺服器 nginx 儲存使用者頭資訊的緩衝區大小 proxy buffers 4 32k proxy buffers緩衝區,網頁平均在32k以下的設定 proxy busy buffers size 64k 高負荷下緩衝大小 proxy buffers...
YII快取操作
檔案依賴 dependency new yii caching filedependency filename hw.txt cache add file key hello world 3000,dependency dependency決定了當快取檔案發生修改時也會失效 表示式的依賴 depen...
Yii框架 快取
1 yii框架的快取 主要就是 memcache 和 cache 兩種 yii的自帶快取都繼承ccache 類,在使用上基本沒有區別 2 使用方法 1 在config配置檔案main.php檔案中配置如下 cache array class system.caching.cfilecache dir...