控制瀏覽器強快取主要靠兩個響應頭部欄位來實現:expires
和cache-control
,瀏覽器在訪問靜態資源時,會首先判斷該資源是否做了強快取。如果發現是強快取並且快取還在有效期內,那就不會去傳送http請求,而直接使用本地的快取(這個快取可能來自於記憶體,也可能來自本地磁碟空間)。其中expires
表示資源的過期時間(gmt格式),是乙個時間點。cache-control
使用max-age
來表示資源可以被快取多久,是乙個時間區間。如果強快取過期了,那就會去協商快取。
以上二者的優先順序cache-control
會高於expires
。如果設定了cache-control
那就不會再去檢查expires
了。
強快取有乙個明顯的缺點就是,無法知道當前伺服器上的資源有沒有發生改變。
協商快取主要靠兩對請求頭部欄位和響應頭部字段組成。分別為last-modified,if-modified-since
和etag,if-none-matched
。
last-modified
會返回資源最近乙個更新的時間,精確到秒。每次這個時間在請求時會通過請求頭if-modified-since
帶到伺服器端。伺服器端對這個字段進行驗證,如果發現這個資源並沒有改動,則會返回304的響應碼。如果發生改動了會返回200響應碼並且返回最新的資源。
etag
這個欄位是由伺服器端返回,並且可以將這個字段作為資源的唯一的標識,當內容發生變化之後,這個etag也會隨之改變。下一次請求時會由if-none-matched
帶上這個etag,伺服器端對這個字段進行驗證,如果發現這個資源並沒有改動,則會返回304的響應碼。如果發生改動了會返回200響應碼並且返回最新的資源。
以上二者的優先順序etag
的方式會高於last-modified
的方式,如果請求頭帶上了if-modified-since
,那就不會再去驗證if-none-matched
這兩者都是強快取的結果,其中前者表示快取來自記憶體,這種快取會隨著瀏覽器關閉而消失。後者表示快取來自硬碟,不會隨著瀏覽器的關閉而消失。控制到底是from memory cache
還是from disk cache
是通過響應頭的etag
來實現的。如果有etag
字段,那麼瀏覽器會將本次快取寫入硬碟。
web前端效能優化 快取
雅虎的16條優化準則,作為前端開發工程師,都是耳熟能詳,信手拈來。但很多時候也能難完全的做得到,一些準則跟工程原則是衝突的,難以落實起來。js檔案放尾部,css檔案放頭部等,這些基本的優化點還是可以做到,但是有時候遇到網速慢的情況,會出現一段時間的白屏,從使用者體驗的角度來說,還是有提公升的空間。根...
前端效能優化之 快取
一.http協議頭控制 cache control用於控制檔案在本地快取有效時長。最常見的,比如伺服器回包 cache control max age 600表示檔案在本地應該快取,且有效時長是600秒 從發出請求算起 在接下來600秒內,如果有請求這個資源,瀏覽器不會發出http請求,而是直接使用...
前端效能優化 快取篇SDK
1.把前端最常用的資源css js存在本地 1.1 前端快取技術sessionstorage 優點 臨時儲存神器,關閉頁面標籤自動 不可以跨頁面互動。取值的時候有兩種方法,一種是用sessionstorage.getitem 鍵名 一種是直接取物件的方法 sessionstorage.鍵名 注意 1...