Yii 的緩存(頁面緩存配置實例)


作為PHP的開源框架,自然少不了對緩存的支持。Yii緩存可以在不同的級別使用。在最低級別,可用來緩存單個數據(數據緩存)。往上一級,我們緩存一個由視圖腳本生成的頁面片斷(片段緩存)。在最高級別,可存儲整個頁面以便需要的時候直接從緩存讀取。本文說明頁面緩存的配置及實現效果;

 

實現分為2步;

1. 在config文件加入緩存組件.

    'cache' => array (

        'class' => 'system.caching.CFileCache',

         'directoryLevel' => 2,

    ),

class標識需要使用的緩存媒介,用途比較廣的類型基本都有支持:

CMemCache: 使用 PHP memcache 擴展.

CApcCache: 使用 PHP APC 擴展.

CDbCache: 使用一張數據庫表來存儲緩存數據。

CFileCache: 使用文件來存儲緩存數據。 特別適用於大塊數據(例如頁面)。

當然,yii也可以支持Redis,需要裝一個插件:

http://www.yiibase.com/download/view/32.html

本文實例使用的是文件緩存,對於文件緩存,緩存到的位置為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不同而變化

dependency'指定緩存失效依賴關系:可指定文件或數據庫;本文采用的是數據庫依賴CDbCacheDependency;

   本例指定的是數據庫,通過數據表的某個值的變化來確定緩存是否失效。例如,如果在表中新增了一條me115_book記錄,即使緩存才過了2分鍾(<3600),仍然判斷為失效,從而查詢數據庫,生成整個頁面,再次緩存;

 

檢查:

查看當前頁面是否緩存,可以dump輸出一個當前服務器時間,從而檢查當前頁面是否已緩存;

 

優化效果:

優化站點為一個博客站點(me115.com),除了DNS解析轉接外,未進行任何優化,優化前的數據為:

首字節時間為842ms;

采用頁面緩存之后的效果:

首字節時間為376ms;html生成的時間大大縮短,后台時間減少了一倍。

當然,通過本圖可以看到整個站點的用時還是比較長,主要是在頁面組件(css/js/圖片)上的下載耗費了不少時間,后續將針對這方面進行前端優化;

 

Posted by: 大CC | DEC17,2012

博客:cnblogs.com/me115/ [訂閱]

微博:新浪微博

 

進一步參考:

[1] http://www.yiiframework.com/doc/api/1.1/COutputCache#dependency-detail

[2] http://www.yiiframework.com/forum/index.php?/topic/3592-%E5%85%B3%E4%BA%8E%E9%A1%B5%E9%9D%A2%E7%BC%93%E5%AD%98%E7%9A%84%E7%96%91%E9%97%AE/page__p__19429

[3] http://www.yiibase.com/download/view/32.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM