Yii 的緩衝(頁面緩衝配置執行個體)

來源:互聯網
上載者:User

作為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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.