摘要:一緩存對性能優(yōu)化請求更快通過將內(nèi)容緩存在本地瀏覽器或距離最近的緩存服務(wù)器如,在不影響網(wǎng)站交互的前提下可以大大加快網(wǎng)站加載速度。強制緩存不發(fā)請求到服務(wù)器,協(xié)商緩存會發(fā)請求到服務(wù)器。四協(xié)商緩存標(biāo)示這個響應(yīng)資源的最后修改時間。
一:緩存對性能優(yōu)化
請求更快:通過將內(nèi)容緩存在本地瀏覽器或距離最近的緩存服務(wù)器(如CDN),在不影響網(wǎng)站交互的前提下可以大大加快網(wǎng)站加載速度。
降低服務(wù)器壓力:在大量用戶并發(fā)請求的情況下,服務(wù)器的性能受到限制,此時將一些靜態(tài)資源放置在網(wǎng)絡(luò)的多個節(jié)點,可以起到均衡負(fù)載的作用,降低服務(wù)器的壓力。
緩存控制機制優(yōu)先級:
Expires < Cache:max-age
Last-Modified < ETag
二:緩存方式
服務(wù)端緩存,例如CDN
客戶端緩存,即瀏覽器緩存,可通過cache,manifest等實現(xiàn).
瀏覽器緩存分兩類,強制緩存和協(xié)商緩存
強制緩存:瀏覽器在加載資源時,根據(jù)http header判斷它是否命中強緩存,如果命中,瀏覽器直接從自己的緩存中讀取資源,不會發(fā)請求到服務(wù)器。比如某個css文件,如果瀏覽器在加載它所在的網(wǎng)頁時,這個css文件的緩存配置命中了強緩存,瀏覽器就直接從緩存中加載這個css,連請求都不會發(fā)送到網(wǎng)頁所在服務(wù)器.
協(xié)商緩存:當(dāng)強緩存沒有命中的時候,瀏覽器一定會發(fā)送一個請求到服務(wù)器,通過服務(wù)器端依據(jù)資源的另外一些http header驗證這個資源是否命中協(xié)商緩存,如果協(xié)商緩存命中,服務(wù)器會將這個請求返回(304),但是不會返回這個資源的數(shù)據(jù),而是告訴客戶端可以直接從緩存中加載這個資源,于是瀏覽器就又會從自己的緩存中去加載這個資源;若未命中請求,則將資源返回客戶端,并更新本地緩存數(shù)據(jù)(200)。
強制緩存不發(fā)請求到服務(wù)器,協(xié)商緩存會發(fā)請求到服務(wù)器。
強制緩存:Expires、Cache-control
協(xié)商緩存:Last-Modified/If-Modified-Since, Etag/If-None-Match
三:強制緩存控制
Expires,HTTP/1.0提出的一個表示資源過期時間的header,它描述的是一個絕對時間,由服務(wù)器返回,用GMT格式的字符串表示,如:Expires:Thu, 31 Dec 2016 23:55:55 GMT,Expires是較老的強緩存管理header,由于它是服務(wù)器返回的一個絕對時間,這樣存在一個問題,如果客戶端的時間與服務(wù)器的時間相差很大(比如時鐘不同步,或者跨時區(qū)),那么誤差就很大,所以在HTTP/1.1版開始,使用Cache-Control: max-age=秒替代。
Cache-Control:針對上述的“Expires時間是相對服務(wù)器而言,無法保證和客戶端時間統(tǒng)一”的問題,http1.1新增了 Cache-Control 來定義緩存過期時間,若報文中同時出現(xiàn)了 Pragma、Expires 和 Cache-Control,會以 Cache-Control 為準(zhǔn)。Cache-Control也是一個通用首部字段,這意味著它能分別在請求報文和響應(yīng)報文中使用。
讀取緩存數(shù)據(jù)條件:上次緩存時間(客戶端的)+max-age < 當(dāng)前時間(客戶端的).Cache-Control取值的含義:
各個消息中的指令含義如下:
no-cache指示請求或響應(yīng)消息不能緩存,該選項并不是說可以設(shè)置”不緩存“,而是需要和服務(wù)器確認(rèn)。
max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應(yīng)。上次緩存時間(客戶端的)+max-age(64200s)<客戶端當(dāng)前時間
min-fresh指示客戶機可以接收響應(yīng)時間小于當(dāng)前時間加上指定時間的響應(yīng)。
四:協(xié)商緩存
Last-Modified/If-Modified-Since:
Last-Modified:標(biāo)示這個響應(yīng)資源的最后修改時間。web服務(wù)器在響應(yīng)請求時,告訴瀏覽器資源的最后修改時間。If-Modified-Since:當(dāng)資源過期時(強緩存失效),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務(wù)器請求時帶上If-Modified-Since標(biāo)簽,把上次服務(wù)器返回的Last-Modified時間返回到服務(wù)器端。web服務(wù)器收到請求后根據(jù)If-Modified-Since 時間與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應(yīng)整片資源內(nèi)容(寫在響應(yīng)消息包體內(nèi)),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應(yīng)HTTP 304 (無需包體,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache。
注: Last-Modified標(biāo)注的最后修改只能精確到秒級,如果某些文件在1秒鐘以內(nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時間(無法及時更新文件)
如果某些文件會被定期生成,當(dāng)有時內(nèi)容并沒有任何變化,但Last-Modified卻改變了,導(dǎo)致文件沒法使用緩存,有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時間,或者與代理服務(wù)器時間不一致等情形(無法使用緩存)。
Etag/If-None-Match:
Etag:web服務(wù)器響應(yīng)請求時,告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(生成規(guī)則由服務(wù)器決定)。Apache中,ETag的值,默認(rèn)是對文件的索引節(jié)(INode),大小(Size)和最后修改時間(MTime)進行Hash后得到的。
If-None-Match:當(dāng)資源過期時(使用Cache-Control標(biāo)識的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務(wù)器請求時帶上頭If-None-Match (Etag的值)。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-None-Match 則與被請求資源的相應(yīng)校驗串進行比對,決定返回200或304。
注:Etag是服務(wù)器自動生成或者由開發(fā)者生成的對應(yīng)資源在服務(wù)器端的唯一標(biāo)識符,能夠更加準(zhǔn)確的控制緩存。
五:CDN
CDN的全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。通過在網(wǎng)絡(luò)各處放置節(jié)點服務(wù)器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時間等綜合信息將用戶的請求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點上。其目的是使用戶可就近取得所需內(nèi)容,解決 Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問網(wǎng)站的響應(yīng)速度。
CDN是一個經(jīng)策略性部署的整體系統(tǒng),包括分布式存儲、負(fù)載均衡、網(wǎng)絡(luò)請求的重定向和內(nèi)容管理4個要件,而內(nèi)容管理和全局的網(wǎng)絡(luò)流量管理(Traffic Management)是CDN的核心所在。通過用戶就近性和服務(wù)器負(fù)載的判斷,CDN確保內(nèi)容以一種極為高效的方式為用戶的請求提供服務(wù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43509.html
摘要:可緩存優(yōu)化并不是所有資源都是可以被緩存的。影響緩存的因素主要有請求方法,請求參數(shù)設(shè)置以及狀態(tài)碼。可緩存的有消極緩存的狀態(tài)碼不可緩存的狀態(tài)碼緩存中的生命周期是指對象相鄰兩次修改的時間。此時該對象是不可緩存對象添加字段可以增長對象生命周期。 一般情況下,網(wǎng)站在第二次加載時,加載時間會大大被提升,這是因為網(wǎng)頁中的一些資源被客戶端緩存下來了,網(wǎng)頁在二次加載的時候就不需要重新從遠(yuǎn)處服務(wù)器請求資源...
摘要:可緩存優(yōu)化并不是所有資源都是可以被緩存的。影響緩存的因素主要有請求方法,請求參數(shù)設(shè)置以及狀態(tài)碼。可緩存的有消極緩存的狀態(tài)碼不可緩存的狀態(tài)碼緩存中的生命周期是指對象相鄰兩次修改的時間。此時該對象是不可緩存對象添加字段可以增長對象生命周期。 一般情況下,網(wǎng)站在第二次加載時,加載時間會大大被提升,這是因為網(wǎng)頁中的一些資源被客戶端緩存下來了,網(wǎng)頁在二次加載的時候就不需要重新從遠(yuǎn)處服務(wù)器請求資源...
摘要:緩存緩存,也叫網(wǎng)關(guān)緩存反向代理緩存。瀏覽器先向網(wǎng)關(guān)發(fā)起請求,網(wǎng)關(guān)服務(wù)器后面對應(yīng)著一臺或多臺負(fù)載均衡源服務(wù)器,會根據(jù)它們的負(fù)載請求,動態(tài)將請求轉(zhuǎn)發(fā)到合適的源服務(wù)器上。雖然這種架構(gòu)負(fù)載均衡源服務(wù)器之間的緩存沒法共享,但卻擁有更好的處擴展性。 一、前言? 工作上遇到一個這樣的需求,一個H5頁面在APP端,如果勾選已讀狀態(tài),則下次打開該鏈接,會跳過此頁面。用到了HTML5 的本地存儲 API ...
摘要:瀏覽器先向網(wǎng)關(guān)發(fā)起請求,網(wǎng)關(guān)服務(wù)器后面對應(yīng)著一臺或多臺負(fù)載均衡源服務(wù)器,會根據(jù)它們的負(fù)載請求,動態(tài)將請求轉(zhuǎn)發(fā)到合適的源服務(wù)器上。雖然這種架構(gòu)負(fù)載均衡源服務(wù)器之間的緩存沒法共享,但卻擁有更好的處擴展性。參考資料緩存機制系列 什么是web緩存 Web緩存是指一個Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會根據(jù)進來的請求保存輸出內(nèi)容的...
摘要:瀏覽器先向網(wǎng)關(guān)發(fā)起請求,網(wǎng)關(guān)服務(wù)器后面對應(yīng)著一臺或多臺負(fù)載均衡源服務(wù)器,會根據(jù)它們的負(fù)載請求,動態(tài)將請求轉(zhuǎn)發(fā)到合適的源服務(wù)器上。雖然這種架構(gòu)負(fù)載均衡源服務(wù)器之間的緩存沒法共享,但卻擁有更好的處擴展性。參考資料緩存機制系列 什么是web緩存 Web緩存是指一個Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會根據(jù)進來的請求保存輸出內(nèi)容的...
摘要:根據(jù)標(biāo)準(zhǔn),到目前為止,一共有種緩存機制,有些是之前已有,有些是才新加入的。首次請求緩存有效期內(nèi)請求緩存過期后請求一般瀏覽器會將緩存記錄及緩存文件存在本地文件夾中。 騰訊 Bugly 特約作者:賀輝超 1. H5 緩存機制介紹 H5,即 HTML5,是新一代的 HTML 標(biāo)準(zhǔn),加入很多新的特性。離線存儲(也可稱為緩存機制)是其中一個非常重要的特性。H5 引入的離線存儲,這意味著 web ...
閱讀 1039·2021-09-13 10:29
閱讀 3390·2019-08-29 18:31
閱讀 2633·2019-08-29 11:15
閱讀 3012·2019-08-26 13:25
閱讀 1369·2019-08-26 12:00
閱讀 2293·2019-08-26 11:41
閱讀 3377·2019-08-26 10:31
閱讀 1488·2019-08-26 10:25