緩存那些事
在你試圖打開一個(gè)新網(wǎng)頁(yè)時(shí),網(wǎng)頁(yè)打開很慢很慢,但是當(dāng)你在第二次打開網(wǎng)頁(yè)時(shí),網(wǎng)頁(yè)“咻”地一下打開了,然而,很神奇的是,當(dāng)你在幾天后再次打開這個(gè)網(wǎng)頁(yè)時(shí),一切都回到了原點(diǎn)。除去其他的一些不可抗力因素,原來是緩存在 “搗鬼”。緩存,相信大家都耳熟能詳了,但是個(gè)中的彎彎道道,不知你是否清楚,那么今天就來聊聊緩存那些事。
為什么會(huì)有緩存?
緩存是將網(wǎng)站的資源(如image、css、js等)儲(chǔ)存在服務(wù)器和瀏覽器之間的副本,保存副本中的資源,并且在下次瀏覽器再次請(qǐng)求時(shí)使用該副本。當(dāng)網(wǎng)站緩存發(fā)現(xiàn)請(qǐng)求的資源已經(jīng)被存儲(chǔ)好了,它就會(huì)攔截發(fā)送的請(qǐng)求,返回存好的副本,而不是再次在服務(wù)器端下載資源。這樣可以在下次瀏覽網(wǎng)站時(shí),提高網(wǎng)站速度;緩解服務(wù)器壓力,提高網(wǎng)站性能。
緩存的好處
- 請(qǐng)求次數(shù)減少,服務(wù)器減負(fù),網(wǎng)站性能大大提高;
- 冗余的數(shù)據(jù)傳輸減少,節(jié)省網(wǎng)費(fèi)開支,加快了瀏覽器加載網(wǎng)頁(yè)的速度;
- 數(shù)據(jù)庫(kù)的訪問次數(shù)降低,減少數(shù)據(jù)庫(kù)負(fù)擔(dān),提高服務(wù)器的服務(wù)能力;
- 高性能,在緩存中查詢的速度比在數(shù)據(jù)庫(kù)查詢快,內(nèi)存查詢,邏輯簡(jiǎn)單運(yùn)算;
- 降低了客戶訪問延遲,直接從緩存讀取,而不是遠(yuǎn)程服務(wù)器;
- 減少網(wǎng)站流量,減少服務(wù)器訪問擁堵。
緩存機(jī)制?
網(wǎng)站在首次加載網(wǎng)頁(yè)內(nèi)容時(shí),一般在你的瀏覽器是沒有緩存的。此時(shí),瀏覽器向服務(wù)器進(jìn)行請(qǐng)求,我現(xiàn)在是沒有緩存的狀態(tài),請(qǐng)求響應(yīng),進(jìn)行緩存協(xié)商,最后呈現(xiàn)網(wǎng)頁(yè)內(nèi)容。
當(dāng)你再次加載網(wǎng)頁(yè)內(nèi)容時(shí),瀏覽器發(fā)送請(qǐng)求,因?yàn)榇藭r(shí)是有緩存狀態(tài)了,那么就會(huì)判斷緩存是否過期,然后進(jìn)行一系列操作:倘若緩存還未過期,那么直接從緩存讀取,給瀏覽器呈現(xiàn)緩存好的資源。
緩存已過期?那么服務(wù)器就會(huì)收到來自瀏覽器發(fā)送的頭部帶有If-None-Match和If-Modified-Since的請(qǐng)求信息;服務(wù)器收到請(qǐng)求過后,會(huì)對(duì)Etag值進(jìn)行判斷,被請(qǐng)求的文件是否有修改,如果有,則返回更新的資源文件并返回200狀態(tài)碼,否則,返回304;如果服務(wù)器收到的請(qǐng)求信息里,沒有包含有Etag值,則將比對(duì)If-Modified-Since和被請(qǐng)求文件的最后修改時(shí)間,一致返回304,否則返回新的last-modified和資源文件并返回200狀態(tài)碼。
總結(jié)
對(duì)于網(wǎng)站而言,緩存是能使其達(dá)到高性能的中流砥柱,但是緩存是需要合理配置的,畢竟不是所有的緩存都是一成不變的,一個(gè)網(wǎng)站資源的緩存在下一次發(fā)生改變時(shí),那么它的使命也就完成了。當(dāng)瀏覽器多次訪問同一個(gè)網(wǎng)頁(yè)資源時(shí),首先會(huì)判斷網(wǎng)站的緩存副本是不是新鮮的,如果不是,那么需要從服務(wù)器獲取最新的版本。
原創(chuàng)文章歸Sytech版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處,商用請(qǐng)聯(lián)系本站獲取版權(quán)。
相關(guān)文章推薦正在加載中...