亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

簡介PHP的Yii框架中緩存的一些高級用法

2024-08-30 19:06:48
字體:
來源:轉載
供稿:網友

頁面緩存:

頁面緩存指的是在服務器端緩存整個頁面的內容。隨后當同一個頁面被請求時,內容將從緩存中取出,而不是重新生成。

頁面緩存由 yii/filters/PageCache 類提供支持,該類是一個過濾器。它可以像這樣在控制器類中使用:

  1. public function behaviors() 
  2.  
  3.  
  4.  return [ 
  5.  
  6.   [ 
  7.  
  8.    'class' => 'yii/filters/PageCache'
  9.  
  10.    'only' => ['index'], 
  11.  
  12.    'duration' => 60, 
  13.  
  14.    'variations' => [ 
  15.  
  16.     /Yii::$app->language, 
  17.  
  18.    ], 
  19.  
  20.    'dependency' => [ 
  21.  
  22.     'class' => 'yii/caching/DbDependency'
  23.  
  24.     'sql' => 'SELECT COUNT(*) FROM post'
  25. //Vevb.com 
  26.    ], 
  27.  
  28.   ], 
  29.  
  30.  ]; 
  31.  

上述代碼表示頁面緩存只在 index 操作時啟用,頁面內容最多被緩存 60 秒,會隨著當前應用的語言更改而變化。如果文章總數發生變化則緩存的頁面會失效。

如你所見,頁面緩存和片段緩存極其相似。它們都支持 duration,dependencies,variations 和 enabled 配置選項。它們的主要區別是頁面緩存是由過濾器實現,而片段緩存則是一個小部件。

你可以在使用頁面緩存的同時,使用片段緩存和動態內容。

HTTP 緩存

除了服務器端緩存外, Web 應用還可以利用客戶端緩存去節省相同頁面內容的生成和傳輸時間。

通過配置 yii/filters/HttpCache 過濾器,控制器操作渲染的內容就能緩存在客戶端。yii/filters/HttpCache 過濾器僅對 GET 和 HEAD 請求生效,它能為這些請求設置三種與緩存有關的 HTTP 頭。

yii/filters/HttpCache::lastModified

yii/filters/HttpCache::etagSeed

yii/filters/HttpCache::cacheControlHeader

Last-Modified 頭

Last-Modified 頭使用時間戳標明頁面自上次客戶端緩存后是否被修改過。

通過配置 yii/filters/HttpCache::lastModified 屬性向客戶端發送 Last-Modified 頭。該屬性的值應該為 PHP callable 類型,返回的是頁面修改時的 Unix 時間戳。該 callable 的參數和返回值應該如下:

  1. /** 
  2.  
  3.  * @param Action $action 當前處理的操作對象 
  4.  
  5.  * @param array $params “params” 屬性的值 
  6.  
  7.  * @return integer 頁面修改時的 Unix 時間戳 
  8.  
  9.  */ 
  10.  
  11. function ($action$params

以下是使用 Last-Modified 頭的示例:

  1. public function behaviors() 
  2.  
  3.  
  4.  return [ 
  5.  
  6.   [ 
  7.  
  8.    'class' => 'yii/filters/HttpCache'
  9.  
  10.    'only' => ['index'], 
  11.  
  12.    'lastModified' => function ($action$params) { 
  13.  
  14.     $q = new /yii/db/Query(); 
  15. //Vevb.com 
  16.     return $q->from('post')->max('updated_at'); 
  17.  
  18.    }, 
  19.  
  20.   ], 
  21.  
  22.  ]; 
  23.  

上述代碼表明 HTTP 緩存只在 index 操作時啟用。它會基于頁面最后修改時間生成一個 Last-Modified HTTP 頭。當瀏覽器第一次訪問 index 頁時,服務器將會生成頁面并發送至客戶端瀏覽器。之后客戶端瀏覽器在頁面沒被修改期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

ETag 頭

“Entity Tag”(實體標簽,簡稱 ETag)使用一個哈希值表示頁面內容。如果頁面被修改過,哈希值也會隨之改變。通過對比客戶端的哈希值和服務器端生成的哈希值,瀏覽器就能判斷頁面是否被修改過,進而決定是否應該重新傳輸內容。

通過配置 yii/filters/HttpCache::etagSeed 屬性向客戶端發送 ETag 頭。該屬性的值應該為 PHP callable 類型,返回的是一段種子字符用來生成 ETag 哈希值。該 callable 的參數和返回值應該如下:

  1. /** 
  2.  
  3.  * @param Action $action 當前處理的操作對象 
  4.  
  5.  * @param array $params “params” 屬性的值 
  6.  
  7.  * @return string 一段種子字符用來生成 ETag 哈希值 
  8.  
  9.  */ 
  10.  
  11. function ($action$params

以下是使用 ETag 頭的示例:

  1. public function behaviors() 
  2.  
  3.  
  4.  return [ 
  5.  
  6.   [ 
  7.  
  8.    'class' => 'yii/filters/HttpCache'
  9.  
  10.    'only' => ['view'], 
  11.  
  12.    'etagSeed' => function ($action$params) { 
  13. //Vevb.com 
  14.     $post = $this->findModel(/Yii::$app->request->get('id')); 
  15.  
  16.     return serialize([$post->title, $post->content]); 
  17.  
  18.    }, 
  19.  
  20.   ], 
  21.  
  22.  ]; 
  23.  

上述代碼表明 HTTP 緩存只在 view 操作時啟用。它會基于用戶請求的標題和內容生成一個 ETag HTTP 頭。當瀏覽器第一次訪問 view 頁時,服務器將會生成頁面并發送至客戶端瀏覽器。之后客戶端瀏覽器標題和內容沒被修改在期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

ETag 相比 Last-Modified 能實現更復雜和更精確的緩存策略。例如,當站點切換到另一個主題時可以使 ETag 失效。

復雜的 Etag 生成種子可能會違背使用 HttpCache 的初衷而引起不必要的性能開銷,因為響應每一次請求都需要重新計算 Etag。請試著找出一個最簡單的表達式去觸發 Etag 失效。

注意:為了遵循 RFC 7232(HTTP 1.1 協議),如果同時配置了 ETag 和 Last-Modified 頭,HttpCache 將會同時發送它們。并且如果客戶端同時發送 If-None-Match 頭和 If-Modified-Since 頭,則只有前者會被接受。

Cache-Control 頭

Cache-Control 頭指定了頁面的常規緩存策略??梢酝ㄟ^配置 yii/filters/HttpCache::cacheControlHeader 屬性發送相應的頭信息。默認發送以下頭:

  1. Cache-Control: public, max-age=3600 

會話緩存限制器

當頁面使 session 時,PHP 將會按照 PHP.INI 中所設置的 session.cache_limiter 值自動發送一些緩存相關的 HTTP 頭。這些 HTTP 頭有可能會干擾你原本設置的 HttpCache 或讓其失效。為了避免此問題,默認情況下 HttpCache 禁止自動發送這些頭。想改變這一行為,可以配置 yii/filters/HttpCache::sessionCacheLimiter 屬性。該屬性接受一個字符串值,包括 public,private,private_no_expire,和 nocache。請參考 PHP 手冊中的緩存限制器了解這些值的含義。

SEO 影響

搜索引擎趨向于遵循站點的緩存頭。因為一些爬蟲的抓取頻率有限制,啟用緩存頭可以可以減少重復請求數量,增加爬蟲抓取效率(譯者:大意如此,但搜索引擎的排名規則不了解,好的緩存策略應該是可以為用戶體驗加分的)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区成人在线视频精品| 欧美精品videos性欧美| 国内成人精品一区| 精品福利免费观看| 成人综合国产精品| 国产精品白嫩初高中害羞小美女| 亚洲欧美一区二区激情| 尤物九九久久国产精品的分类| 亚洲欧美国产制服动漫| 亚洲www在线| 蜜月aⅴ免费一区二区三区| 亚洲欧美在线一区二区| 日韩成人在线播放| 久久精品亚洲一区| 色哟哟亚洲精品一区二区| 在线电影中文日韩| 欧美成人亚洲成人日韩成人| 国产日韩在线亚洲字幕中文| 成人黄色在线播放| 欧美在线日韩在线| 亚洲97在线观看| 国产欧美一区二区三区视频| 日本成人免费在线| 欧美激情在线播放| 亚洲精品v欧美精品v日韩精品| 欧美性一区二区三区| 美女啪啪无遮挡免费久久网站| 最近2019年好看中文字幕视频| 亚洲国产精品久久久久秋霞不卡| 最近中文字幕日韩精品| 日韩高清电影免费观看完整| 激情久久av一区av二区av三区| 欧美放荡办公室videos4k| 欧美黑人性猛交| 久久亚洲精品视频| 国产精品都在这里| 欧美高清不卡在线| 亚洲精品乱码久久久久久金桔影视| 久久久精品影院| 国产+人+亚洲| 亚洲美女视频网站| 国产人妖伪娘一区91| 亚洲电影中文字幕| 亚洲精品一区二区久| 国产精品极品尤物在线观看| 亚洲精选在线观看| 青草青草久热精品视频在线观看| 欧美激情va永久在线播放| 欧美色另类天堂2015| 国产一区二区三区网站| 亚洲爱爱爱爱爱| 日本午夜人人精品| 精品在线小视频| 亚洲国产欧美一区二区丝袜黑人| 国产精品香蕉在线观看| 国产精品久久久久久久久久久久久| 91免费福利视频| 欧美在线观看日本一区| 色哟哟亚洲精品一区二区| 久久国产精品久久久久久久久久| 欧美亚洲国产精品| 欧美一级片免费在线| 欧美成人三级视频网站| 亚洲综合在线中文字幕| 6080yy精品一区二区三区| 亚洲成人xxx| 成人免费视频xnxx.com| 亚洲丝袜在线视频| 亚洲图片在区色| 欧美日韩高清在线观看| 久久99久久99精品免观看粉嫩| 国产精品a久久久久久| 亚洲欧美精品suv| 深夜福利亚洲导航| 91沈先生在线观看| 欧美孕妇孕交黑巨大网站| 亚洲欧美一区二区三区四区| 久久精品在线视频| 欧美午夜精品伦理| 91av在线免费观看| 亚洲最大av在线| 亚洲精品久久久久久下一站| 国内免费久久久久久久久久久| 5566成人精品视频免费| 国产精品久久77777| 日韩中文字幕在线精品| 国产在线精品播放| 亚洲黄色av女优在线观看| 国产精品精品一区二区三区午夜版| 欧美老肥婆性猛交视频| 夜夜嗨av色一区二区不卡| 亚洲精品午夜精品| 97在线视频国产| 亚洲第一综合天堂另类专| 欧美日韩国产页| 久久亚洲春色中文字幕| 欧美乱妇高清无乱码| 欧美高清自拍一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品国语对白| 欧美极品美女视频网站在线观看免费| 日韩精品极品在线观看播放免费视频| 美女扒开尿口让男人操亚洲视频网站| 成人有码在线视频| 性欧美暴力猛交69hd| 国产激情久久久| 亚洲free性xxxx护士白浆| 欧美精品videosex牲欧美| 国产69精品99久久久久久宅男| 成人久久久久爱| 精品久久久久久亚洲国产300| 日韩精品极品毛片系列视频| 久久久久亚洲精品国产| 国产97在线亚洲| 日韩美女在线播放| 亚洲欧美国产另类| 亚洲成人免费在线视频| 91手机视频在线观看| 色www亚洲国产张柏芝| 97视频免费在线看| 国产69精品久久久久9| 亚洲欧美日韩精品久久亚洲区| 亚洲深夜福利视频| 91精品久久久久久久久中文字幕| 日本久久久a级免费| 不卡在线观看电视剧完整版| 日韩在线视频中文字幕| 国产精品一香蕉国产线看观看| 91久久久久久久一区二区| 超碰97人人做人人爱少妇| 亚洲第一网站免费视频| 91在线视频成人| 91精品国产色综合| 色婷婷成人综合| 国产精品91在线| 亚洲国产精品网站| 中文字幕精品在线| 久久激情五月丁香伊人| 国产一区二区三区视频免费| 九九综合九九综合| 久久97精品久久久久久久不卡| 亚洲欧美日韩久久久久久| 538国产精品一区二区在线| 久久亚洲国产精品成人av秋霞| 久久久久久有精品国产| 国产精品高清在线| 亚洲日本成人网| 亚洲最新视频在线| 欧美性xxxx在线播放| 亚洲一级一级97网| 欧美最猛性xxxxx免费| 亚洲国产欧美一区| 午夜精品蜜臀一区二区三区免费| 国产精品揄拍500视频| 欧美在线视频观看免费网站| 国产91精品在线播放| 国产精品精品一区二区三区午夜版| 国产精品亚洲精品| 91亚洲va在线va天堂va国| 97在线免费视频| 伊人激情综合网| 成人伊人精品色xxxx视频| 欧美一级免费视频| 一区二区成人精品|