1. 程式人生 > >http快取淺析及HttpCache使用方法 [ 2.0 版本 ]

http快取淺析及HttpCache使用方法 [ 2.0 版本 ]

1.學習理由:合理的利用http快取在對網站效能提升有非常巨大的作用,而且十分經濟實惠 2.http快取淺析 3.如何使用HttpCache來實現http快取

http快取淺析 1.當客戶端第一次訪問網站的時候,瀏覽器是沒有快取的,所以所有的資源都是從伺服器獲取的(會將css,js,圖片)等資源快取到客戶端的本地 2.當客戶端第二次以後訪問網站的時候,會先去先去檢查本地有沒有有效快取, a.如果在客戶端就可以確定是有效快取的話,那麼就不會去請求伺服器(通過http header expires資訊來確定) b.如果客戶端無法確定是不是有效快取的話,就會請求伺服器驗證,在伺服器端驗證有兩種驗證方式,etag/HTTP_IF_NONE_MATCH和lastmodified/HTTP_IF_MODIFIED_SINCE, 優先使用etag驗證,etag不通過會使用lastmodified的,如果驗證通過,會返回304(表示資源沒有變化),304是沒有body資訊,所以傳輸資料量非常小,對伺服器的壓力特別小, 如果驗證不通過,則會去請求資源,返回200,這個會帶有Body,所以資料量會比較大,對web優化是沒有效果的

3.如何使用http快取協議優化web a.首先我們可以將一些永遠不會變化的資源,在其action裡面通過設定比較大的expires來是這個資源在很長的時間裡面是有效的,設定方法如下 $response->getHeaders()->set('Expires', 'Mon, 01 May 2017 08:31:23 GMT'); b.其次,對於一些不常變化的網站資源,我們可以使用yii提供的HttpCache,來設定他的lastmodified或etag來優化網站,程式碼如下:

public function behaviors() { return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index'], 'lastModified' => function ($action, $params) { $q = new \yii\db\Query(); return $q->from('post')->max('updated_at'); }, ], ]; }

解釋一下,這個程式碼的意思,在客戶端訪問,index這個action的時候,會在http的頭部加上一個lastmodified的驗證,這裡用到了http快取原理的第二條: 1.如果post表的最大的updated_at沒有變化,那麼返回客戶端304,沒有資料的 2.如果post表的最大的updated_at有變化,那麼放回200,有資料的