成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

瀏覽器緩存

geekzhou / 3418人閱讀

摘要:主要可分為強(qiáng)制緩存字段字段對比緩存字段標(biāo)識瀏覽器行為引起的緩存變化移動端的緩存策略其實(shí),在講述移動端的緩存策略時,并沒有分析的特別詳細(xì),只是大致的講解了一下目前大家都在使用的緩存策略。

前言

在前端開發(fā)中,緩存有利于加快網(wǎng)頁的加載速度,同時緩存能夠被反復(fù)利用,所以可以減少流量和帶寬的開銷。

緩存的分類有很多種,CDN緩存、數(shù)據(jù)庫緩存、代理服務(wù)器緩存和瀏覽器緩存。本篇將來講解一下Web開發(fā)中的瀏覽器緩存。這個在實(shí)際開發(fā)環(huán)境中往往也會被問到,或者使用到。如何去準(zhǔn)確認(rèn)清楚緩存的概念,是前端必須要去學(xué)習(xí)的。如果你喜歡我的文章,歡迎評論,歡迎Star~。歡迎關(guān)注我的github博客

正文

瀏覽器的緩存問題,主要指的是http的緩存——即協(xié)議層。而h5新增的storage和數(shù)據(jù)庫緩存,那是應(yīng)用層緩存,并不被計(jì)入本篇的分析內(nèi)容里面。下面我們正式開始來進(jìn)行緩存的分析。

協(xié)議層的緩存,其實(shí),可以被分成強(qiáng)制緩存和對比緩存。

強(qiáng)制緩存

首先,我們先來看一張強(qiáng)制緩存時的時序圖,來了解一下強(qiáng)制緩存在不同情況下的請求模式:

從圖中,我們不難看出,只有當(dāng)緩存失效時,才會去服務(wù)器獲取最新資源的方式,就是強(qiáng)制緩存。而在協(xié)議層的字段中,可以造成強(qiáng)制緩存的字段有兩個Expires和Cache-Control。

1.0的時候見到我——Expires

最早使用的是Expires字段,該字段表示緩存到期時間,即有效時間+當(dāng)時服務(wù)器的時間,然后將這個時間設(shè)置在header中返回給服務(wù)器。因此,該時間是一個絕對時間,舉例說明:

Expires: Thu, 10 Nov 2017 08:45:11 GMT

圖片示例:

![expires](
http://lhbzimo.oss-cn-shenzhe...

在響應(yīng)消息頭中,設(shè)置這個字段之后,就可以告訴瀏覽器,在未過期之前不需要再次請求。

但是,這個字段設(shè)置時有缺點(diǎn)

由于是絕對時間,用戶可能會將客戶端本地的時間進(jìn)行修改,而導(dǎo)致瀏覽器判斷緩存失效,重新請求該資源,同時,還導(dǎo)致客戶端與服務(wù)端的時間不一致,致使緩存失效。

1.1的時候我來了——Cache-Control

已知Expires的缺點(diǎn)之后,在HTTP/1.1中,增加了一個字段Cache-Control,該字段表示資源緩存的最大有效時間,在該時間內(nèi),客戶端不需要向服務(wù)器發(fā)送請求

這兩者的區(qū)別就是前者是絕對時間,而后者是相對時間。我們不妨舉個例子來說明一下:

Cache-Control: max-age=2592000

圖片示例:

下面列舉一下Cache-Control的字段可以帶的值:

max-age:即最大有效時間,在上面的例子中我們可以看到

no-cache:表示沒有緩存,即告訴瀏覽器該資源并沒有設(shè)置緩存

s-maxage:同max-age,但是僅用于共享緩存,如CDN緩存

public:多用戶共享緩存,默認(rèn)設(shè)置

private:不能夠多用戶共享,HTTP認(rèn)證之后,字段會自動轉(zhuǎn)換成private。

總結(jié)一下,自從http1.1開始,Expires逐漸被Cache-Control取代。Cache-Control是一個相對時間,即使客戶端時間發(fā)生改變,相對時間也不會隨之改變,這樣可以保持服務(wù)器和客戶端的時間一致性。而且Cache-Control的可配置性比較強(qiáng)大。

對比緩存

扯完強(qiáng)制緩存,我們來看看對比緩存。在解釋這個之前,是否可以先猜想一下,強(qiáng)制緩存是,緩存在未過有效期時,不需要請求資源。那么,對比緩存的原理又該如何呢?

廢話不多說,我們也先從對比緩存的時序圖講起,如圖:

對比緩存的過程是,先從緩存中獲取對應(yīng)的數(shù)據(jù)標(biāo)識,然后向服務(wù)器發(fā)送請求,確認(rèn)數(shù)據(jù)是否更新,如果更新,則返回新數(shù)據(jù)和新緩存;反之,則返回304狀態(tài)碼,告知客戶端緩存未更新,可繼續(xù)使用。

這正好彌補(bǔ)了一些強(qiáng)制緩存的缺陷。對比緩存主要應(yīng)用于一些時常需要動態(tài)更新的資源文件。

對比緩存在協(xié)議里的字段是Last-Modified和If-Modified-Since。

別人的好伙伴——Last-Modified

Last-Modified:服務(wù)器告知客戶端,資源最后一次被修改的時間,例如

Last-Modified: Thu, 10 Nov 2015 08:45:11 GMT

If-Modified-Since:再次請求時,請求頭中帶有該字段,服務(wù)器會將If-Modified-Since的值與Last-Modified字段進(jìn)行對比,如果相等,則表示未修改,響應(yīng)304;反之,則表示修改了,響應(yīng)200狀態(tài)碼,返回?cái)?shù)據(jù)。

這個字段可以和Cache-Control配合使用。

但是他還是有一定缺陷的:

如果資源更新的速度是秒以下單位,那么該緩存是不能被使用的,因?yàn)樗臅r間單位最低是秒。

如果文件是通過服務(wù)器動態(tài)生成的,那么該方法的更新時間永遠(yuǎn)是生成的時間,盡管文件可能沒有變化,所以起不到緩存的作用。

我來完善它——Etag

由于Last-modified還是存在缺陷的,盡管大多數(shù)情況下,會使用它,但當(dāng)遇到我們上面所說的場景時,我們可能就需要了解一下,我們另一個小伙伴了——Etag。

Etag存儲的是文件的特殊標(biāo)識(一般都是hash生成的),服務(wù)器存儲著文件的Etag字段,可以在與每次客戶端傳送If-no-match的字段進(jìn)行比較,如果相等,則表示未修改,響應(yīng)304;反之,則表示已修改,響應(yīng)200狀態(tài)碼,返回?cái)?shù)據(jù)。

最后,通過一張?jiān)韴D,我們來加深一下記憶:

至此為止,兩種緩存類型的緩存方式已經(jīng)闡述完成了,不知你是否已經(jīng)心中已經(jīng)有個大致的印象,當(dāng)別人問起時,你可以對答如流。希望我們一同進(jìn)步吧,fighting。

瀏覽器行為引起的不同

最后,我們來聊聊瀏覽器行為會引起緩存的變化吧。

下面說一下瀏覽器的行為會產(chǎn)生怎樣的請求:

刷新網(wǎng)頁 => 如果緩存沒有失效,瀏覽器會直接使用緩存;反之,則向服務(wù)器請求數(shù)據(jù)

手動刷新(F5) => 瀏覽器會認(rèn)為緩存失效,在請求服務(wù)器時加上Cache-Control: max-age=0字段,然后詢問服務(wù)器數(shù)據(jù)是否更新。

強(qiáng)制刷新(Ctrl + F5) => 瀏覽器會直接忽略緩存,在請求服務(wù)器時加上Cache-Control: no-cache字段,然后重新向服務(wù)器拉取文件。

移動端的緩存處理

在PC端或許這樣子的緩存機(jī)制就已經(jīng)足夠了,因?yàn)镻C端不需要為網(wǎng)絡(luò)的問題擔(dān)心。

但是,移動端卻不行,任何一個網(wǎng)絡(luò)請求的增加,對于移動端的加載消耗時間都是比較大的(誰叫移動端的網(wǎng)太差呢,3G、2G)。那么,上述的緩存有什么問題呢?其實(shí),強(qiáng)制緩存是沒有太大問題的,因?yàn)橹灰彺娌坏狡冢遣粫敕?wù)器發(fā)送請求的;但是如果是對比緩存的情況下,304的問題就比較巨大,因?yàn)樗鼤斐蔁o用的請求。每次在使用緩存前,都會向服務(wù)器發(fā)送請求確認(rèn),導(dǎo)致網(wǎng)絡(luò)的延時。

一次完美的緩存必須保證兩點(diǎn):

數(shù)據(jù)緩存之后,盡量減少服務(wù)器的請求

如果資源更新的話,必須使得客戶端的資源一起更新。

所以,一般我們會運(yùn)用的方式是:

在資源文件后面加上表示,如config.f1ec3.js、config.v1.js之類的,然后給資源設(shè)置較長的緩存時間,如一年

Cache-Control: max-age=31536000

這樣子,就不會造成304的回包現(xiàn)象。
然后一旦資源發(fā)生更新時,我們可以改變資源后面的標(biāo)識符,實(shí)現(xiàn)靜態(tài)資源非覆蓋式更新。

總結(jié)

本篇大致分析了瀏覽器緩存部分的分類情況,以及細(xì)化分析。主要可分為:

強(qiáng)制緩存

Expires字段

Cache-Control字段

對比緩存

Last-Modefied字段

Etag標(biāo)識

瀏覽器行為引起的緩存變化

移動端的緩存策略

其實(shí),在講述移動端的緩存策略時,并沒有分析的特別詳細(xì),只是大致的講解了一下目前大家都在使用的緩存策略。可能之后,還會寫一篇移動端緩存的細(xì)分文章。

最后,如果你對我寫的有疑問,可以與我討論。如果我寫的有錯誤,歡迎指正。你喜歡我的博客,請給我關(guān)注Star~呦。大家一起總結(jié)一起進(jìn)步。歡迎關(guān)注我的github博客

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91888.html

相關(guān)文章

  • 深入剖析覽器緩存策略

    摘要:瀏覽器緩存只存在于每個單獨(dú)的客戶端,因此它是私有緩存。表示該資源既能被瀏覽器緩存,也能被任何中間人比如代理服務(wù)器等緩存。普通刷新會啟用協(xié)商緩存,忽略強(qiáng)緩存。只有在地址欄或收藏夾輸入網(wǎng)址通過鏈接引用資源等情況下,瀏覽器才會啟用強(qiáng)緩存。 前言 在訪問一個網(wǎng)頁時,客戶端會從服務(wù)器下載所需的資源。但是有些資源很少發(fā)生變動,例如 HTML、JS、CSS、圖片、字體文件等。如果每次加載頁面都從源服...

    Cympros 評論0 收藏0
  • 覽器緩存機(jī)制

    摘要:從瀏覽器角度來看,整個就是一個源服務(wù)器,從這個層面來說,瀏覽器和服務(wù)器之間的緩存機(jī)制,在這種架構(gòu)下同樣適用。如果命中,則返回,告訴瀏覽器資源未更新,可使用本地的緩存。 緩存類型 緩存在宏觀上可以分成兩類:私有緩存和共享緩存。共享緩存就是那些能被各級代理緩存的緩存。私有緩存就是用戶專享的,各級代理不能緩存的緩存。 微觀上可以分下面幾類: 瀏覽器緩存 緩存存在的意義就是當(dāng)用戶點(diǎn)擊back按...

    LeanCloud 評論0 收藏0
  • 【前端基礎(chǔ)進(jìn)階】覽器緩存機(jī)制

    摘要:接下來的內(nèi)容中我們將通過緩存位置緩存策略以及實(shí)際場景應(yīng)用緩存策略來探討瀏覽器緩存機(jī)制。是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。在所有瀏覽器緩存中,覆蓋面基本是最大的。 一、前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了。一個優(yōu)秀的緩存策略可以縮短網(wǎng)頁請求資源的距離,減少延遲,并且由于緩存文件可以重復(fù)利用,還可以減少帶寬,降低網(wǎng)絡(luò)負(fù)荷。對于一個數(shù)據(jù)請求來說,可以分為...

    Mertens 評論0 收藏0
  • 深入理解覽器緩存機(jī)制

    摘要:接下來的內(nèi)容中我們將通過緩存位置緩存策略以及實(shí)際場景應(yīng)用緩存策略來探討瀏覽器緩存機(jī)制。是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。在所有瀏覽器緩存中,覆蓋面基本是最大的。 一、前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了。一個優(yōu)秀的緩存策略可以縮短網(wǎng)頁請求資源的距離,減少延遲,并且由于緩存文件可以重復(fù)利用,還可以減少帶寬,降低網(wǎng)絡(luò)負(fù)荷。 對于一個數(shù)據(jù)請求來說,可以分...

    binaryTree 評論0 收藏0
  • 深入理解覽器緩存機(jī)制

    摘要:接下來的內(nèi)容中我們將通過緩存位置緩存策略以及實(shí)際場景應(yīng)用緩存策略來探討瀏覽器緩存機(jī)制。是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。在所有瀏覽器緩存中,覆蓋面基本是最大的。 一、前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了。一個優(yōu)秀的緩存策略可以縮短網(wǎng)頁請求資源的距離,減少延遲,并且由于緩存文件可以重復(fù)利用,還可以減少帶寬,降低網(wǎng)絡(luò)負(fù)荷。 對于一個數(shù)據(jù)請求來說,可以分...

    mikasa 評論0 收藏0
  • 深入理解覽器緩存機(jī)制

    摘要:接下來的內(nèi)容中我們將通過緩存位置緩存策略以及實(shí)際場景應(yīng)用緩存策略來探討瀏覽器緩存機(jī)制。是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。在所有瀏覽器緩存中,覆蓋面基本是最大的。 一、前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了。一個優(yōu)秀的緩存策略可以縮短網(wǎng)頁請求資源的距離,減少延遲,并且由于緩存文件可以重復(fù)利用,還可以減少帶寬,降低網(wǎng)絡(luò)負(fù)荷。 對于一個數(shù)據(jù)請求來說,可以分...

    draveness 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<