天天看點

實戰給AW_Blog插件添加緩存     

            aheadworks公司的blog插件可以算是magento所有免費插件中最有名也是使用最廣泛的一個插件了,就我自己來說,也是每個項目的必備插件(我一般用來做為新聞插件使用)。今天拿它做例子示範下給block添加緩存(cache)。

實戰給AW_Blog插件添加緩存     

</h1>

   這個截圖是我某個項目使用aw_blog插件的執行個體,使用aw_blog_block_blog這個block檔案在首頁輸出某個新聞類别下的新聞清單,aw_blog插件本身是沒給輸出内容做過緩存處理的,也就是說,即便你一天或幾天才更新一次新聞,頁面每次載入時依然要從資料庫裡把這些資料取一遍,這個是比較沒必要的。

下面來給這個block加上緩存,magento本身已經提供了一套給block添加緩存的寫法,隻需要簡單的加幾句代碼就可以

其中cache_lifetime指緩存周期,這裡我設定的是86400秒,也就是一天,cache_tags指給該緩存設定的标簽,這裡我設定的是post這個model的一個常量。做完這一步,這個block檔案的緩存就好了,頁面載入時,這塊内容不會再每次去資料庫取資料,而是直接載入緩存好的html,減少了頁面載入所消耗的時間。

到這一步,整個工作才完成了一半,為什麼這麼說呢?這裡可以做個實驗,在加完以上的代碼并重新整理過一次頁面後,資料已經寫進緩存檔案裡了,這時候去背景新增或修改一篇新聞,你會發現前台頁面的内容并沒有跟着改變,而是維持之前的内容。那麼什麼時候才會變成新的内容呢,一天之後,因為之前給緩存設定的有效時間是一天,一天之内的有效期内,頁面都會去讀取緩存檔案而不是資料庫。這時候你可以這樣處理,在背景修改過内容後,手動重新整理背景的緩存,讓效果實時可見,或者用更好的方案,通過程式控制,在每次新聞内容新增或修改時自動重新整理對應的緩存。

打開aw_blog_model_post這個檔案,在頭部定義一個常量

在底部添加如下代碼

該常量即是之前給blog添加的緩存的cache_tags,_beforesave函數是所有model類繼承自父類的方法,可以在該model對應的對象實體儲存資料時觸發,這裡重寫_beforesave,去調用一個cleancache函數,cleancache函數裡隻有一句重要的代碼,就是mage::app()-&gt;cleancache(self::cache_tag),這個方法可以清除指定标簽(tag)的緩存,比如這裡,它隻會清除tag為aw_blog的緩存,而不是全部系統緩存。

從完整的流程來說,首先前台頁面第一次載入時,該block會将内容緩存進緩存檔案,然後當背景儲存新聞時,通過cleancache會清除指定tag的緩存,這之後再次載入頁面時就會生成新的緩存檔案。這樣就做到了緩存新聞内容以提高速度的同時,依然可以在背景做出資料改變時在頁面實時顯示新的資料。

新聞資料在頁面上一般所占空間不大,即使緩存起來可能也不會對加載速度有很明顯的提升,這裡隻是以此為例子展示下magento所提供的block緩存機制。這個例子很簡單,如果要對其他東西做緩存可能會有各種更複雜的流程,這裡不再探讨。

ps:本文的前提是你在背景已經把magento的緩存打開了

實戰給AW_Blog插件添加緩存     

參考文章:http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput