摘要:加快頁(yè)面打開(kāi)速度降低服務(wù)器壓力減少網(wǎng)絡(luò)損耗瀏覽器緩存有標(biāo)簽控制一般不用,所以本文不介紹與頭信息控制兩種。是服務(wù)器端在響應(yīng)請(qǐng)求時(shí)用來(lái)規(guī)定資源是否需要被瀏覽器緩存以及緩存的有效時(shí)間等。
瀏覽器緩存究竟有什么作用呢?在這里我將瀏覽器緩存的作用簡(jiǎn)單地歸結(jié)為以下幾點(diǎn)。
加快頁(yè)面打開(kāi)速度
降低服務(wù)器壓力
減少網(wǎng)絡(luò)損耗
瀏覽器緩存有 HTML Meta 標(biāo)簽控制(一般不用,所以本文不介紹)與 HTTP 頭信息控制兩種。
緩存標(biāo)識(shí)字段便是 Expires 和 Cache-Control。
Expires? 是服務(wù)器端在響應(yīng)請(qǐng)求時(shí)用來(lái)規(guī)定資源的失效時(shí)間。
Cache-Control 是服務(wù)器端在響應(yīng)請(qǐng)求時(shí)用來(lái)規(guī)定資源是否需要被瀏覽器緩存以及緩存的有效時(shí)間等。
Expires 是 HTTP 1.0 的字段,而 Cache-Control? 是 HTTP 1.1 的字段,當(dāng) Expires? 與 ?Cache-Control 同時(shí)存在時(shí),Cache-Control 的優(yōu)先級(jí)要高于 ?Expires。
在瀏覽器緩存中,還保存了其它關(guān)于資源副本的描述字段,這些字段都是服務(wù)器返回信息頭帶過(guò)來(lái)的,如 Last-Modified 和 ETag。
Last-Modified 是服務(wù)器端在響應(yīng)請(qǐng)求時(shí)用來(lái)說(shuō)明資源的最后修改時(shí)間。與之對(duì)應(yīng)的是 If-Modified-Since 字段。在服務(wù)器再驗(yàn)證過(guò)程中,瀏覽器發(fā)送的 HTTP 請(qǐng)求的請(qǐng)求頭中會(huì)帶上 If-Modified-Since 字段,值為該資源 ?Last-Modified 屬性的值。
當(dāng)服務(wù)器端接收到帶有 ?If-Modified-Since 屬性的請(qǐng)求時(shí),則會(huì)將 If-Modified-Since 屬性的值與被請(qǐng)求資源的最后修改時(shí)間做對(duì)比。如果相同,說(shuō)明資源沒(méi)有新的修改,則響應(yīng) HTTP 304,瀏覽器會(huì)繼續(xù)使用原先保存的該資源的副本;如果最后修改時(shí)間比較新,則說(shuō)明資源被修改過(guò),則響應(yīng) HTTP 200,并且返回最新的資源。
ETag 是服務(wù)器端在響應(yīng)請(qǐng)求時(shí)用來(lái)說(shuō)明資源在服務(wù)器端的唯一標(biāo)識(shí)。與之對(duì)應(yīng)的是 If-None-Match 字段。在服務(wù)器再驗(yàn)證過(guò)程中,瀏覽器發(fā)送的 HTTP 請(qǐng)求的請(qǐng)求頭中會(huì)帶上 If-Modified-Since 字段,值為該資源 ?Etag 屬性的值。
當(dāng)服務(wù)器端接收到帶有 ?If-None-Match 屬性的請(qǐng)求時(shí),則會(huì)將 If-None-Match 屬性的值與被請(qǐng)求資源的唯一標(biāo)識(shí)做對(duì)比。如果相同,說(shuō)明資源沒(méi)有新的修改,則響應(yīng) HTTP 304,瀏覽器會(huì)繼續(xù)使用原先保存的該資源的副本;如果不同,則說(shuō)明資源被修改過(guò),則響應(yīng) HTTP 200,并且返回最新的資源。
那么當(dāng)?Last-Modified / If-Modified-Since 和?Etag / If-None-Match 同時(shí)存在是什么情況呢?
事實(shí)上,當(dāng)兩者同時(shí)存在時(shí),Etag / If-None-Match 的優(yōu)先級(jí)要高于?Last-Modified / If-Modified-Since
最后,雖然說(shuō)瀏覽器緩存對(duì)用戶(hù)體驗(yàn)有極大的好處,但是作為開(kāi)發(fā)者,我們?cè)陂_(kāi)發(fā)的時(shí)候則需要禁止這「討厭」瀏覽器緩存,我的方法是打開(kāi)瀏覽器的開(kāi)發(fā)者工具,在 Network 中有個(gè) Disable cache ,鉤上就可以了,鉤上后瀏覽器會(huì)忽略掉文檔過(guò)期驗(yàn)證和服務(wù)器再驗(yàn)證的過(guò)程,直接向服務(wù)器請(qǐng)求最新的資源。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/100065.html
摘要:我在工程實(shí)踐中直接使用類(lèi)作為對(duì)應(yīng)實(shí)體類(lèi)的。因此我的結(jié)論是,此庫(kù)并不適用于我的工程實(shí)踐。工程實(shí)踐中對(duì)其應(yīng)用方式的考慮在的官方教程中建議針對(duì)每請(qǐng)求創(chuàng)建新的實(shí)例,查詢(xún)請(qǐng)求結(jié)束則實(shí)例們的生命周期結(jié)束。 因?yàn)樽约簩?xiě)過(guò)基于react的前端應(yīng)用,因此一看到GraphQL就被深深吸引,真是直擊痛點(diǎn)??!服務(wù)端開(kāi)發(fā)一直是基于java, Spring的,因此開(kāi)始研究如何在現(xiàn)有工程框架下加入graphql的支...
摘要:在一個(gè)成熟的系統(tǒng)中,能夠運(yùn)用到緩存的地方其實(shí)并不是一處。那么在以終端用戶(hù)為起點(diǎn),系統(tǒng)所用的數(shù)據(jù)庫(kù)為終點(diǎn)的這條道路上可以作為緩存設(shè)立點(diǎn)的位置大致有以下這些。緩存也有一系列的副作用需要考慮。 如果這是第二次看到我的文章,歡迎文末掃碼訂閱我個(gè)人的公眾號(hào)(跨界架構(gòu)師)喲~ 本文長(zhǎng)度為3578字,建議閱讀10分鐘。堅(jiān)持原創(chuàng),每一篇都是用心之作~ 此前的「伸縮性」章節(jié)結(jié)束了,此文是「高性能」章...
摘要:第一階段基礎(chǔ)階段基礎(chǔ)程序員重點(diǎn)把搞熟練核心是安裝配置基本操作目標(biāo)能夠完成基本的系統(tǒng)安裝,簡(jiǎn)單配置維護(hù)能夠做基本的簡(jiǎn)單系統(tǒng)的開(kāi)發(fā)能夠在中型系統(tǒng)中支持某個(gè)功能模塊的開(kāi)發(fā)。本項(xiàng)不做重點(diǎn)學(xué)習(xí),除非對(duì)前端有興趣。 第一階段:基礎(chǔ)階段(基礎(chǔ)PHP程序員) 重點(diǎn):把LNMP搞熟練(核心是安裝配置基本操作) 目標(biāo):能夠完成基本的LNMP系統(tǒng)安裝,簡(jiǎn)單配置維護(hù);能夠做基本的簡(jiǎn)單系統(tǒng)的PHP開(kāi)發(fā);能夠在P...
摘要:如果沒(méi)有學(xué)習(xí)過(guò)計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩?wèn)題時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無(wú)疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見(jiàn) CSS 布局方式詳見(jiàn): 一些常見(jiàn)的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
閱讀 1289·2021-09-03 10:44
閱讀 674·2019-08-30 13:13
閱讀 2857·2019-08-30 13:11
閱讀 2026·2019-08-30 12:59
閱讀 1106·2019-08-29 15:32
閱讀 1656·2019-08-29 15:25
閱讀 1095·2019-08-29 12:24
閱讀 1358·2019-08-27 10:58