Fecshop 緩存

2018-05-24 14:49 更新

FecShop 緩存

fecshop 有整頁緩存和局部緩存

整頁緩存 - full page cache

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

配置:

@appfront/config/fecshop_local_services/Cache.php

具體如下:

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

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

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

詳細看里面的注釋代表的具體含義。

開啟緩存后,頁面的數(shù)據將從cache中讀取,頁面的動態(tài)數(shù)據部分,會 通過ajax的方式把頁面的動態(tài)數(shù)據加載過來。 通過整頁緩存,頁面的加載就會非常的快。

局部緩存

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

首先參看配置文件:

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

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

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

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

如果上面的配置設置了cache 為開啟,并且class對應的動態(tài)數(shù)據提供對象, 存在函數(shù) getCacheKey ,則可以使用緩存

譬如:head的配置如下,下面定義了cache是否開啟,如果設置為true,則 代表開啟緩存, timeout代表緩存的過期時間。

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

上面配置中的class對應的Head.php文件內容為:

<?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。

通過上面的配置可以看出,head, headerfooter, menu 都是可以設置局部緩存的。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號