国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

圖解瀏覽器緩存,教你提高用戶體驗(yàn)

littlelightss / 2839人閱讀

摘要:用于防止重要的信息被無(wú)意的發(fā)布。只有特定用戶才能使用緩存,適用于公共緩存服務(wù)器的情況。強(qiáng)緩存的過(guò)程強(qiáng)緩存瀏覽器直接從本地緩存中獲取數(shù)據(jù),不與服務(wù)器進(jìn)行交互。當(dāng)瀏覽器發(fā)現(xiàn)緩存過(guò)期后,緩存并不一定不能使用了。

歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~

本文由前端林子發(fā)表于云+社區(qū)專欄

瀏覽器緩存,是瀏覽器端保存數(shù)據(jù),用于快速讀取避免重復(fù)資源請(qǐng)求的優(yōu)化機(jī)制,有效的緩存使用可以避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求加快頁(yè)面速度,從而提高用戶體驗(yàn)。

一 強(qiáng)緩存 1.1 區(qū)分Expires和Cache-Control

以一個(gè)接口返回的響應(yīng)頭為例:

這里我畫了張思維導(dǎo)圖,對(duì)Expires和Cache-Control做比較:

具體介紹Expires和Cache-Control:

Expires:

(1)Expires是HTTP1.0的東西,現(xiàn)在默認(rèn)瀏覽器均默認(rèn)使用HTTP 1.1,所以它的作用基本忽略;

(2)Expires規(guī)定了緩存失效時(shí)間(Date為當(dāng)前時(shí)間),是絕對(duì)時(shí)間。由于Expires返回的是一個(gè)絕對(duì)時(shí)間,在服務(wù)器時(shí)間與客戶端時(shí)間相差較大的時(shí)候,緩存命中不準(zhǔn)確;

Cache-Control:

(1)Cache-Control是HTTP1.1的

(2)Cache-Control的max-age規(guī)定了緩存有效時(shí)間(2552s),是相對(duì)時(shí)間;

(3)若響應(yīng)頭Expires和Cache-Control同時(shí)存在,Cache-Control優(yōu)先級(jí)高于Expires

Cache-Control的常用指令:

no-cache:不使用本地緩存,需要使用協(xié)商緩存,也就是先與服務(wù)器確認(rèn)緩存是否可用。

no-store:禁用緩存。用于防止重要的信息被無(wú)意的發(fā)布。在請(qǐng)求消息中發(fā)送將使得請(qǐng)求和響應(yīng)消息都不使用緩存。

public:其他用戶也可使用緩存,適用于公共緩存服務(wù)器的情況。

private:只有特定用戶才能使用緩存,適用于公共緩存服務(wù)器的情況。

max-age:客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)。

min-fresh客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。

max-stale指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

注意:no-cache指令并不是不緩存,no-cache的意思是可以緩存,但每次用應(yīng)該去向服務(wù)器驗(yàn)證緩存是否可用。no-store才是不緩存內(nèi)容。
1.2 強(qiáng)緩存的過(guò)程

強(qiáng)緩存:瀏覽器直接從本地緩存中獲取數(shù)據(jù),不與服務(wù)器進(jìn)行交互。

· 瀏覽器第一次跟服務(wù)器請(qǐng)求一個(gè)資源,服務(wù)器在返回這個(gè)資源的同時(shí),在response的header會(huì)加上Expires/Cache-Control的header;

· 瀏覽器再請(qǐng)求這個(gè)資源時(shí),先從緩存中尋找,找到這個(gè)資源后,比較Expires或Cache-Control的max-age字段值做比較, 如果在有效期內(nèi),則讀取緩存內(nèi)容;若緩存已過(guò)期,則重新向服務(wù)器發(fā)送請(qǐng)求;

· header在重新加載的時(shí)候會(huì)被更新

這里我畫了兩張圖,瀏覽器第一次請(qǐng)求:

瀏覽器第一次請(qǐng)求

瀏覽器再次請(qǐng)求:

強(qiáng)緩存

對(duì)于強(qiáng)緩存,chrome瀏覽器的狀態(tài)碼:

200 OK(from disk cache)或是200 OK (from memory cache)

例如:請(qǐng)求某個(gè)圖片后,當(dāng)瀏覽器再次訪問(wèn)這個(gè)圖片時(shí),發(fā)現(xiàn)有這個(gè)圖片的緩存,且緩存沒過(guò)期,所以就使用緩存。

當(dāng)瀏覽器發(fā)現(xiàn)緩存過(guò)期后,緩存并不一定不能使用了。比如文件雖然過(guò)了有效期,但內(nèi)容并沒有發(fā)生改變,還是可以用緩存數(shù)據(jù)。所以,這個(gè)時(shí)候需要與服務(wù)器協(xié)商,讓服務(wù)器判斷本地緩存是否還能使用。那么又怎么判斷服務(wù)端文件有沒有更新呢?主要有兩種方式:

Last-Modified,If-Modified-since。

二 協(xié)商緩存 2.1 區(qū)分Last-Modified和If-Modified-Since

以一個(gè)返回的接口為例:

Last-Modified的格式:

Last-Modified: Mon, 17 Sep 2018 12:06:18 GMT

If-Modified-Since的格式:

If-Modified-Since: Mon, 17 Sep 2018 12:06:18 GMT

2.2 Etag是什么

web服務(wù)器響應(yīng)請(qǐng)求時(shí),告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器決定)。Apache中,ETag的值默認(rèn)是對(duì)文件的索引節(jié)(INode),大小(Size)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的。

2.3 協(xié)商緩存的過(guò)程

瀏覽器第一次請(qǐng)求:

瀏覽器第一次緩存

瀏覽器再一次請(qǐng)求:

協(xié)商緩存

Last-Modified、If-Modified-Since:

· 瀏覽器第一次向服務(wù)器請(qǐng)求一個(gè)資源,服務(wù)器在返回這個(gè)資源的同時(shí),在respone的header加上Last-Modified字段,表示該資源在服務(wù)器上的最后修改時(shí)間;

· 瀏覽器再次向服務(wù)器請(qǐng)求這個(gè)資源時(shí),在request的header上加上If-Modified-Since字段,這個(gè)值就是上一次請(qǐng)求時(shí)返回的Last-Modified的值;

·服務(wù)器收到資源請(qǐng)求時(shí),比較If-Modified-Since字段值和被請(qǐng)求資源的最后修改時(shí)間,若資源最后修改時(shí)間較舊,則說(shuō)明文件沒有修改,返回304 Not Modified, 瀏覽器從緩存中加載資源;若不相同,說(shuō)明文件被更新,瀏覽器直接從服務(wù)器加載資源, 返回200;

·重新加載資源時(shí)更新Last-Modified Header

Etag、If-None-Match

· 瀏覽器第一次向服務(wù)器請(qǐng)求一個(gè)資源,服務(wù)器在返回這個(gè)資源的同時(shí),在respone的header加上ETag字段;

·瀏覽器再次跟服務(wù)器請(qǐng)求這個(gè)資源時(shí),在request的header上加上If-None-Match,這個(gè)值就是上一次請(qǐng)求時(shí)返回的ETag的值;

·服務(wù)器再次收到資源請(qǐng)求時(shí),再根據(jù)資源生成一個(gè)新的ETag,與瀏覽器傳過(guò)來(lái)If-None-Match比較,如果這兩個(gè)值相同,則說(shuō)明資源沒有變化,返回304 Not Modified, 瀏覽器從緩存中加載資源,否則返回200 資源內(nèi)容。與Last-Modified不一樣的是,當(dāng)服務(wù)器返回304 Not Modified的響應(yīng)時(shí),由于ETag重新生成過(guò),response header中還會(huì)把這個(gè)ETag返回,即使這個(gè)ETag跟之前的沒有變化

2.4 為什么有了Last-Modified,還要用Etag呢?

HTTP1.1中ETag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問(wèn)題:

·一些文件也許會(huì)周期性的更改,但是他的內(nèi)容并不改變(僅僅改變的修改時(shí)間),這個(gè)時(shí)候我們并不希望客戶端認(rèn)為這個(gè)文件被修改了,而重新GET;

·某些文件修改非常頻繁,比如在秒以下的時(shí)間內(nèi)進(jìn)行修改,(比方說(shuō)1s內(nèi)修改了N次),If-Modified-Since能檢查到的粒度是s級(jí)的,這種修改無(wú)法判斷(或者說(shuō)UNIX記錄MTIME只能精確到秒);

·某些服務(wù)器不能精確的得到文件的最后修改時(shí)間。

對(duì)于上述情景,利用ETag能夠更加準(zhǔn)確的控制緩存,因?yàn)镋Tag是服務(wù)器自動(dòng)生成的資源在服務(wù)器端的唯一標(biāo)識(shí)符,資源每次變動(dòng),都會(huì)生成新的ETag值。Last-Modified與ETag是可以一起使用的,但服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag

2.5 比較強(qiáng)緩存和協(xié)商緩存

基于上文對(duì)強(qiáng)緩存和協(xié)商緩存過(guò)程的解釋,這里我把強(qiáng)緩存和協(xié)商緩存繪制在一張圖里,方便比較,具體過(guò)程可以參照上文:

http緩存

三 小結(jié)

本文主要通過(guò)圖解介紹了http的緩存,具體包括強(qiáng)緩存和協(xié)商緩存。如有問(wèn)題,歡迎指正。

相關(guān)閱讀
【每日課程推薦】機(jī)器學(xué)習(xí)實(shí)戰(zhàn)!快速入門在線廣告業(yè)務(wù)及CTR相應(yīng)知識(shí)

此文已由作者授權(quán)騰訊云+社區(qū)發(fā)布,更多原文請(qǐng)點(diǎn)擊

搜索關(guān)注公眾號(hào)「云加社區(qū)」,第一時(shí)間獲取技術(shù)干貨,關(guān)注后回復(fù)1024 送你一份技術(shù)課程大禮包!

海量技術(shù)實(shí)踐經(jīng)驗(yàn),盡在云加社區(qū)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/62047.html

相關(guān)文章

  • 圖解覽器緩存教你提高用戶體驗(yàn)

    摘要:用于防止重要的信息被無(wú)意的發(fā)布。只有特定用戶才能使用緩存,適用于公共緩存服務(wù)器的情況。強(qiáng)緩存的過(guò)程強(qiáng)緩存的過(guò)程強(qiáng)緩存瀏覽器直接從本地緩存中獲取數(shù)據(jù),不與服務(wù)器進(jìn)行交互。當(dāng)瀏覽器發(fā)現(xiàn)緩存過(guò)期后,緩存并不一定不能使用了。歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由前端林子發(fā)表于云+社區(qū)專欄 瀏覽器緩存,是瀏覽器端保存數(shù)據(jù),用于快速讀取或避免重復(fù)資源請(qǐng)求的優(yōu)化機(jī)制,有效...

    TigerChain 評(píng)論0 收藏0
  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過(guò)去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0
  • 設(shè)計(jì)架構(gòu)

    摘要:先來(lái)看一張系統(tǒng)前后端架構(gòu)模型圖。一種接口的約定本文用于定義一種統(tǒng)一的接口設(shè)計(jì)方案,希望具有參考價(jià)值。,和都是常見的軟件架構(gòu)設(shè)計(jì)模式,它通過(guò)分離關(guān)注點(diǎn)來(lái)改進(jìn)代碼的組織方式。 如何無(wú)痛降低 if else 面條代碼復(fù)雜度 相信不少同學(xué)在維護(hù)老項(xiàng)目時(shí),都遇到過(guò)在深深的 if else 之間糾纏的業(yè)務(wù)邏輯。面對(duì)這樣的一團(tuán)亂麻,簡(jiǎn)單粗暴地繼續(xù)增量修改常常只會(huì)讓復(fù)雜度越來(lái)越高,可讀性越來(lái)越差,有沒...

    graf 評(píng)論0 收藏0
  • 前端優(yōu)化 - 收藏集 - 掘金

    摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點(diǎn)長(zhǎng),我想先聊一聊閱讀的方式,我希望你閱讀的時(shí)候,能夠把我當(dāng)作你的競(jìng)爭(zhēng)對(duì)手,你的夢(mèng)想是超越我。 如何提升頁(yè)面渲染效率 - 前端 - 掘金Web頁(yè)面的性能 我們每天都會(huì)瀏覽很多的Web頁(yè)面,使用很多基于Web的應(yīng)用。這些站點(diǎn)看起來(lái)既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...

    VincentFF 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<