【web】緩存策略

常見的5中緩存策略

http://www.reibang.com/p/207130233e60

緩存策略的分類

1)基于訪問的時間:此類算法按各緩存項被訪問時間來組織緩存隊列知允,決定替換對象睬魂。如LRU光坝。

2)基于訪問頻率:此類算法用緩存項的被訪問頻率來組織緩存忠蝗。如LFU、LRU2翔冀、2Q铐然、LIRS涝滴。

3)訪問時間與頻率兼顧:通過兼顧訪問時間和頻率。使得數據模式在變化時緩存策略仍有較好性能鲤拿。如FBR假褪、LRUF、ALRFU近顷。多數此類算法具有一個可調或自適應參數生音,通過該參數的調節(jié)使緩存策略在基于訪問時間與頻率間取得一個平衡。

4)基于訪問模式:某些應用有較明確的數據訪問特點窒升,進而產生與其相適應的緩存策略缀遍。如專用的VoD系統設計的A&L緩存策略,同時適應隨機饱须、順序兩種訪問模式的SARC策略域醇。

https://blog.csdn.net/qq_39283195/article/details/94328205

web緩存策略

web緩存策略

瀏覽器緩存

瀏覽器緩存機制有四個方面,它們按照獲取資源時請求的優(yōu)先級依次排列如下:

1.Memory Cache

MemoryCache,是指存在內存中的緩存譬挚。從優(yōu)先級上來說锅铅,它是瀏覽器最先嘗試去命中的一種緩存。從效率上來說殴瘦,它是響應速度最快的一種緩存狠角。不過當頁面關閉時,內存里的數據也就沒有了蚪腋。資源存不存內存丰歌,瀏覽器秉承的是“節(jié)約原則”。我們發(fā)現屉凯,Base64格式的圖片立帖,幾乎永遠可以被塞進 memory cache,這可以視作瀏覽器為節(jié)省渲染開銷的“自保行為”悠砚;此外晓勇,體積不大的 JS、CSS 文件灌旧,也有較大地被寫入內存的幾率——相比之下绑咱,較大的 JS、CSS 文件就沒有這個待遇了枢泰,內存資源是有限的描融,它們往往被直接甩進磁盤。

2.Service Worker Cache

Service Worker 是一種獨立于主線程之外的 Javascript 線程衡蚂。它可以幫我們實現離線緩存窿克、消息推送和網絡代理等功能。通常我們如果要使用 Service Worker 基本就是以下幾個步驟:

首先我們需要在頁面的 JavaScript 主線程中注冊 Service Worker毛甲。注冊成功后后臺開始安裝步驟年叮, 通常在安裝的過程中需要緩存一些靜態(tài)資源。安裝成功后開始激活 Service Worker玻募;激活成功后 Service Worker 可以控制頁面了(監(jiān)聽 fetch 和 message 事件)只损,但是只針對在成功注冊了 Service Worker 后打開的頁面。在頁面發(fā)起 http 請求時七咧,service worker 可以通過 fetch 事件攔截請求改执,并且給出自己的響應。頁面和 serviceWorker 之間可以通過 posetMessage() 方法發(fā)送消息坑雅,發(fā)送的消息可以通過 message 事件接收到辈挂。Service Worker 必須以 https 協議為前提

3.HTTP Cache

HTTP 緩存分為強緩存和協商緩存裹粤。優(yōu)先級較高的是強緩存终蒂,在命中強緩存失敗的情況下蜂林,才會走協商緩存。

強緩存

指的是向瀏覽器緩存查找該請求的結果拇泣,并根據該結果的緩存規(guī)則來決定是否使用該緩存結果的過程噪叙。強緩存是利用http響應頭中的Expires和Cache-Control兩個字段來控制的。

Expires——實現強緩存霉翔,過去我們一直用expires睁蕾。在服務器的響應頭里,會將過期時間寫入 expires 字段债朵;那么子眶,當我們試圖再次向服務器請求資源時,瀏覽器就會先對比本地時間和 expires 的時間序芦,如果本地時間小于 expires 設定的過期時間臭杰,就直接去緩存中取這個資源。不過expires依賴于本地時間谚中,如果服務端和客戶端的時間設置不同渴杆,那么expires 將無法達到我們的預期。

Cache-Control——考慮到 expires 的局限性宪塔,HTTP1.1 新增了 Cache-Control 字段來完成 expires 的任務磁奖。當 Cache-Control 與 expires 同時出現時,我們以 Cache-Control 為準某筐。Cache-Control 包含以下幾個值:

(1)max-age:會等于一個時間長度(以秒為單位)

(2)public 與 private:如果我們?yōu)橘Y源設置了 public比搭,那么它既可以被瀏覽器緩存,也可以被代理服務器緩存(也就是多個用戶可以共享這個緩存)来吩;如果我們設置了 private敢辩,則該資源只能被瀏覽器緩存蔽莱。

(3)no-store 與 no-cache:如果我們?yōu)橘Y源設置了 no-cache弟疆,瀏覽器會對響應進行緩存,但是需要到服務器去確認這個緩存是否能用盗冷。即走我們下文即將講解的協商緩存的路線怠苔。如果設置了no-store,所有內容都不會被緩存仪糖,即不使用強制緩存柑司,也不使用協商緩存

協商緩存

協商緩存指的是強制緩存失效后,瀏覽器向服務器詢問緩存的相關信息锅劝,進而判斷是重新發(fā)起請求還是從本地拿緩存的過程攒驰。如果服務端提示緩存資源未改動(Not Modified),資源會被重定向到瀏覽器緩存故爵,這種情況下網絡請求對應的狀態(tài)碼是 304玻粪。

4.Push Cache

Push Cache 是指 HTTP2 在 server push 階段存在的緩存。


服務器緩存

CDN

CDN (Content Delivery Network,即內容分發(fā)網絡)指的是一組分布在各個地區(qū)的服務器劲室。這些服務器存儲著數據的副本伦仍,因此服務器可以根據哪些服務器與用戶距離最近,來滿足數據的請求很洋。 CDN 提供快速服務充蓝,較少受高流量影響。

CDN 的核心點有兩個喉磁,一個是緩存谓苟,一個是回源

“緩存”就是說我們把資源 copy 一份到 CDN 服務器上這個過程线定,“回源”就是說 CDN 發(fā)現自己沒有這個資源(一般是緩存的數據過期了)娜谊,轉頭向根服務器(或者它的上層服務器)去要這個資源的過程。

CDN 往往被用來存放靜態(tài)資源斤讥,就是像 JS纱皆、CSS、圖片等不需要業(yè)務服務器進行計算即得的資源芭商。


HTML5緩存

Web Storage

Web Storage 是 HTML5 專門為瀏覽器存儲而提供的數據存儲機制派草。存儲容量可以達到 5-10M 之間。它又分為 Local Storage 與 Session Storage铛楣。

?Local Storage 與 Session Storage 的區(qū)別

兩者的區(qū)別在于生命周期與作用域的不同近迁。

生命周期:存儲在Local Storage的數據是永遠不會過期的,使其消失的唯一辦法是手動刪除簸州;而 Session Storage 是臨時性的本地存儲鉴竭,當會話結束(頁面被關閉)時,存儲內容也隨之被釋放岸浑。

作用域:Local Storage搏存、Session Storage 和 Cookie 都遵循同源策略。但 Session Storage 特別的一點在于矢洲,即便是相同域名下的兩個頁面璧眠,只要它們不在同一個瀏覽器窗口中打開,那么它們的 Session Storage 內容便無法共享读虏。

應用場景

Local Storage 的特點之一是持久责静,有時我們更傾向于用它來存儲一些內容穩(wěn)定的資源。比如圖片內容豐富的電商網站會用它來存儲 Base64 格式的圖片字符串盖桥,有的網站還會用它存儲一些不經常更新的 CSS灾螃、JS 等靜態(tài)資源。

Session Storage 更適合用來存儲生命周期和它同步的會話級別的信息揩徊。這些信息只適用于當前會話腰鬼,當你開啟新的會話時藐握,它也需要相應的更新或釋放。比如微博的 Session Storage 就主要是存儲你本次會話的瀏覽足跡垃喊。

IndexDB

IndexDB 是一個運行在瀏覽器上的非關系型數據庫猾普。



參考文章:

https://segmentfault.com/a/1190000018120629

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市本谜,隨后出現的幾起案子初家,更是在濱河造成了極大的恐慌,老刑警劉巖乌助,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜在,死亡現場離奇詭異,居然都是意外死亡他托,警方通過查閱死者的電腦和手機掖肋,發(fā)現死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赏参,“玉大人志笼,你說我怎么就攤上這事“崖ǎ” “怎么了纫溃?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長韧掩。 經常有香客問我紊浩,道長,這世上最難降的妖魔是什么疗锐? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任坊谁,我火速辦了婚禮,結果婚禮上滑臊,老公的妹妹穿的比我還像新娘口芍。我一直安慰自己,他們只是感情好简珠,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布阶界。 她就那樣靜靜地躺著虹钮,像睡著了一般聋庵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芙粱,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天祭玉,我揣著相機與錄音,去河邊找鬼春畔。 笑死脱货,一個胖子當著我的面吹牛岛都,可吹牛的內容都是我干的。 我是一名探鬼主播振峻,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼臼疫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扣孟?” 一聲冷哼從身側響起烫堤,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凤价,沒想到半個月后鸽斟,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡利诺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年富蓄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慢逾。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡立倍,死狀恐怖,靈堂內的尸體忽然破棺而出侣滩,到底是詐尸還是另有隱情帐萎,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布胜卤,位于F島的核電站疆导,受9級特大地震影響,放射性物質發(fā)生泄漏葛躏。R本人自食惡果不足惜澈段,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舰攒。 院中可真熱鬧败富,春花似錦、人聲如沸摩窃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猾愿。三九已至鹦聪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒂秘,已是汗流浹背泽本。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姻僧,地道東北人规丽。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蒲牧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赌莺。 傳聞我的和親對象是個殘疾皇子冰抢,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344