fecshop 有整頁緩存和局部緩存
實現(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
, header
, footer
, menu
都是可以設置局部緩存的。
更多建議: