Fecshop 緩存

2018-05-24 14:49 更新

FecShop 緩存

fecshop 有整頁(yè)緩存和局部緩存

整頁(yè)緩存 - full page cache

實(shí)現(xiàn)原理為yii2的full page cache

配置:

@appfront/config/fecshop_local_services/Cache.php

具體如下:

return [
    'cache' => [
        /**
         * cache 總開(kāi)關(guān),設(shè)置false后,無(wú)論cacheConfig中的enable
         * 是否為true,都會(huì)全部關(guān)閉掉cache。
         */
        'enable'=> true,     
        /**
         * 各個(gè)頁(yè)面cache的配置
         */
        'cacheConfig'   => [
            # 分類頁(yè)面
            'category'  => [
                'enable'        => true,     # 是否開(kāi)啟分類頁(yè)面的緩存
                'timeout'       => 3600,     # 則設(shè)置緩存的過(guò)期時(shí)間,這里設(shè)置為秒
                'disableUrlParam' => 'fecshop', # 如果開(kāi)啟緩存,在url加入什么參數(shù)后,系統(tǒng)不讀取緩存,這個(gè)選項(xiàng)是為了方便在不刷新緩存的情況下,查看無(wú)緩存的頁(yè)面是什么樣子。
                # url出現(xiàn)的這些參數(shù)的值,將參與cache唯一key的生成。
                'cacheUrlParam' => [
                    # 分頁(yè),排序,等參數(shù) 
                    'p','dir','sort','numPerPage',
                    # 側(cè)欄屬性過(guò)濾等參數(shù)
                    'price','size','color',
                    'style','dresses-length','pattern-type',
                    'collar','xinghao','cpu'
                ],
            ],
            # 產(chǎn)品頁(yè)面
            'product'  => [
                'enable'        => true,     # 是否開(kāi)啟產(chǎn)品頁(yè)面的緩存
                'timeout'       => 3600,     #則設(shè)置緩存的過(guò)期時(shí)間,這里設(shè)置為秒
                'disableUrlParam' => 'fecshop', # 如果開(kāi)啟緩存,在url加入什么參數(shù)后,系統(tǒng)不讀取緩存,這個(gè)選項(xiàng)是為了方便在不刷新緩存的情況下,查看無(wú)緩存的頁(yè)面是什么樣子。
            ],

            
            # 首頁(yè)頁(yè)面
            'home'  => [
                'enable'        => true,     # 是否開(kāi)啟首頁(yè)頁(yè)面的緩存
                'timeout'       => 3600,     # 則設(shè)置緩存的過(guò)期時(shí)間,這里設(shè)置為秒
                'disableUrlParam' => 'fecshop', # 如果開(kāi)啟緩存,在url加入什么參數(shù)后,系統(tǒng)不讀取緩存,這個(gè)選項(xiàng)是為了方便在不刷新緩存的情況下,查看無(wú)緩存的頁(yè)面是什么樣子。
            ],

            
            # Article(page)頁(yè)面
            'article'  => [
                'enable'        => true,     # 是否開(kāi)啟Article頁(yè)面的緩存
                'timeout'       => 3600,     # 則設(shè)置緩存的過(guò)期時(shí)間,這里設(shè)置為秒
                'disableUrlParam' => 'fecshop',# 如果開(kāi)啟緩存,在url加入什么參數(shù)后,系統(tǒng)不讀取緩存,這個(gè)選項(xiàng)是為了方便在不刷新緩存的情況下,查看無(wú)緩存的頁(yè)面是什么樣子。
            ],
        ],
    ],
];

詳細(xì)看里面的注釋代表的具體含義。

開(kāi)啟緩存后,頁(yè)面的數(shù)據(jù)將從cache中讀取,頁(yè)面的動(dòng)態(tài)數(shù)據(jù)部分,會(huì) 通過(guò)ajax的方式把頁(yè)面的動(dòng)態(tài)數(shù)據(jù)加載過(guò)來(lái)。 通過(guò)整頁(yè)緩存,頁(yè)面的加載就會(huì)非常的快。

局部緩存

局部緩存,相當(dāng)于一個(gè)區(qū)塊, 譬如fecshop pc端web的menu部分,頭部header部分,尾部footer部分等,都可以 通過(guò)局部緩存的方式,將其緩存起來(lái), 在購(gòu)物車,下單,賬戶中心等內(nèi)容全部是動(dòng)態(tài)內(nèi)容,不能做全頁(yè)緩存的頁(yè)面, 可以通過(guò)局部緩存的方式緩存某些非動(dòng)態(tài)內(nèi)容的區(qū)塊, fecshop是通過(guò) page - widget 服務(wù)實(shí)現(xiàn)的。

首先參看配置文件:

@appfront/config/fecshop_local_services/Page.php , 代碼如下:

'widget' => [
    'widgetConfig' => [
        'head' => [
            # 動(dòng)態(tài)數(shù)據(jù)提供部分
            'class' => 'fecshop\app\appfront\widgets\Head',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/head.php',
            # 緩存
            'cache' => [
                'enable'    => false, # 是否開(kāi)啟
                'timeout'   => 4500,  # 緩存過(guò)期時(shí)間
            ],
        ],
        'header' => [
            'class' => 'fecshop\app\appfront\widgets\Headers',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/header.php',
            'cache' => [
                'enable'    => false,
                'timeout'   => 4500,
            ],
        ],
        'topsearch' => [
            'view'  => 'widgets/topsearch.php',
        ],
        'menu' => [
            'class' => 'fecshop\app\appfront\widgets\Menu',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/menu.php',
            'cache' => [
                'enable'    => false,
                //'timeout'     => 4500,
            ],
        ],
        'footer' => [
            'class' => 'fecshop\app\appfront\widgets\Footer',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/footer.php',
            'cache' => [
                'enable'    => false,
                //'timeout'     => 4500,
            ],
        ],
        'scroll' => [
            #'class' => 'fecshop\app\appfront\modules\Cms\block\widgets\Scroll',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/scroll.php',
        ],
        'breadcrumbs' => [
            'view'  => 'widgets/breadcrumbs.php',
        ],
        'flashmessage' => [
            'view'  => 'widgets/flashmessage.php',
        ],
    ]
],

上面是各個(gè)區(qū)塊的配置, 各個(gè)區(qū)塊的調(diào)用方式為:

<?= Yii::$service->page->widget->render('menu',$this); ?>

如果上面的配置設(shè)置了cache 為開(kāi)啟,并且class對(duì)應(yīng)的動(dòng)態(tài)數(shù)據(jù)提供對(duì)象, 存在函數(shù) getCacheKey ,則可以使用緩存

譬如:head的配置如下,下面定義了cache是否開(kāi)啟,如果設(shè)置為true,則 代表開(kāi)啟緩存, timeout代表緩存的過(guò)期時(shí)間。

'head' => [
            # 動(dòng)態(tài)數(shù)據(jù)提供部分
            'class' => 'fecshop\app\appfront\widgets\Head',
            # 根據(jù)多模板的優(yōu)先級(jí),依次去模板找查找該文件,直到找到這個(gè)文件。
            'view'  => 'widgets/head.php',
            # 緩存
            'cache' => [
                'enable'    => false, # 是否開(kāi)啟
                'timeout'   => 4500,  # 緩存過(guò)期時(shí)間
            ],
        ],

上面配置中的class對(duì)應(yīng)的Head.php文件內(nèi)容為:

<?php
namespace fecshop\app\appfront\widgets;
use Yii;
use fecshop\interfaces\block\BlockCache;
class Head implements BlockCache
{
    public function getLastData()
    {
        return [

            
        ];
    }

    
    public function getCacheKey(){
        $store = Yii::$service->store->currentStore;
        $moduleId = Yii::$app->controller->module->id;
        $controllerId = Yii::$app->controller->id;
        $actionId = Yii::$app->controller->action->id;
        $urlPathKey = $moduleId.'_'.$controllerId.'_'.$actionId;
        return self::BLOCK_CACHE_PREFIX.'_'.$store.'_'.$urlPathKey;

    
    }
}

getCacheKey() 返回的是cache的唯一key。

通過(guò)上面的配置可以看出,head, header, footer, menu 都是可以設(shè)置局部緩存的。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)