国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端性能優(yōu)化之HTTP緩存

這篇具有很好參考價值的文章主要介紹了前端性能優(yōu)化之HTTP緩存。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前端緩存

前端緩存可分為兩大類:HTTP 緩存瀏覽器緩存。

我們今天重點是 HTTP 緩存,下面這張圖是前端緩存的一個大致知識點:

前端性能優(yōu)化之HTTP緩存

HTTP 緩存

首先解決困擾繞人們的老大難問題:

一、什么是HTTP緩存?

HTTP 緩存會存儲與請求關(guān)聯(lián)的響應(yīng),并將存儲的響應(yīng)復(fù)用于后續(xù)請求。(MDN)

通俗的講,HTTP 緩存指的是:當(dāng)瀏覽器向服務(wù)器發(fā)起資源請求時,會首先抵達(dá)瀏覽器緩存,如果瀏覽器有當(dāng)前請求資源的有效副本,就可以直接從瀏覽器緩存中取出資源并返回,不用再重新去服務(wù)器中獲取了。

常見的 HTTP 緩存只能緩存 GET 請求的資源,對于其他類型的響應(yīng)則無能為力,所以后續(xù)說的請求緩存都是指 GET 請求。

HTTP 緩存都是從第二次請求開始的,第一次請求資源時,服務(wù)器返回資源,并在 response headers 頭中回傳資源的緩存參數(shù);第二次請求時,瀏覽器會判斷這些參數(shù),命中強(qiáng)緩存就直接返回 200,否則就把緩存相關(guān)參數(shù)添加到 request headers 中傳給服務(wù)器,服務(wù)器判斷是否命中協(xié)商緩存,命中則返回 304,否則服務(wù)器會返回 200 并返回新的資源。

瀏覽器第一次請求流程圖:
前端性能優(yōu)化之HTTP緩存

注意: 官網(wǎng)文檔上用詞為 fresh 和 stale,國內(nèi)的文檔上大多都用詞為強(qiáng)緩存和協(xié)商緩存,此文也如此。

1. HTTP 緩存分類

根據(jù)是否需要向服務(wù)器重新發(fā)起請求來分類,可以分為強(qiáng)緩存協(xié)商緩存;

注意: MDN上一般按照私有緩存和共有緩存來分來,但以上分類更適合于我們初學(xué)者了解緩存相關(guān)知識,所以本文按以上方式對緩存進(jìn)行分類!

下圖是強(qiáng)緩存和協(xié)商緩存的一些對比:

前端性能優(yōu)化之HTTP緩存

1.1 強(qiáng)緩存

強(qiáng)緩存是指在緩存數(shù)據(jù)未失效的情況下(即 Cache-Controlmax-age 沒有過期或者 Expires 的緩存時間沒有過期),那么就會直接使用瀏覽器的緩存數(shù)據(jù),而不會請求服務(wù)器。

強(qiáng)緩存生效時,HTTP 狀態(tài)碼為 200。

優(yōu)點:這種方式頁面加載速度是最快的,性能也是很好的。
缺點:如果在這期間服務(wù)端資源有更新,頁面上是拿不到更新后的數(shù)據(jù)的。 這種情況我們在開發(fā)中也是經(jīng)常遇見的,比如我們修改了頁面的某個樣式,在頁面上刷新了但沒有生效,因為走的是強(qiáng)緩存,所以 Ctrl + F5 一頓操作過后就好了。

跟強(qiáng)緩存相關(guān)的 header 頭屬性有(Pragma / Cache-Control / Expires)

前端性能優(yōu)化之HTTP緩存
強(qiáng)緩存流程圖:
前端性能優(yōu)化之HTTP緩存

1.2 協(xié)商緩存

當(dāng)以下條件滿足一個或多個時:

  1. 當(dāng)?shù)谝淮握埱髸r,服務(wù)器返回的響應(yīng)頭中沒有設(shè)置 Cache-Control 和 Expires 字段;
  2. Cache-Control 和 Expires 過期;
  3. Cache-Control 和 Pragma 設(shè)置為:no-cache;

那么瀏覽器第二次請求時,就會與服務(wù)器進(jìn)行協(xié)商,與服務(wù)端對比判斷資源是否進(jìn)行了更新。

如果服務(wù)端資源未更新,則會返回 304 狀態(tài)碼,告訴瀏覽器當(dāng)前緩存可繼續(xù)使用;如果服務(wù)端資源有更新,則會返回 200 狀態(tài)碼,并同時返回更新后的資源和緩存信息字段。

與協(xié)商緩存相關(guān)的字段有 ETag / If-None-Match、Last-Modified / If-Modified-Since,此時請求頭與響應(yīng)頭需要成對出現(xiàn)。
前端性能優(yōu)化之HTTP緩存

協(xié)商緩存流程示意圖如下:
前端性能優(yōu)化之HTTP緩存

二、如何使用 HTTP 緩存?

一般需要緩存的資源有 HTML 頁面和其他一些靜態(tài)資源:

  1. HTML 頁面緩存的設(shè)置主要是在 <head> 標(biāo)簽中嵌入 <meta> 字段,這種方式只對頁面有效,對頁面上的資源無效。

    1.1 HTML 頁面禁用緩存的設(shè)置如下:

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0"> 
    

    2.2 HTML 設(shè)置使用緩存如下:

    <meta http-equiv="Cache-Control" content="max-age=7200" />
    <meta http-equiv="Expires" content="Mon, 20  Aug 2018 23:00:00 GMT" />
    
  2. 靜態(tài)資源的緩存一般是在web服務(wù)器上配置的,常用的web服務(wù)器有:nginx、apache。具體的配置這里不做詳細(xì)介紹,大家自行查閱。

三、HTTP 緩存的幾個注意點

  1. 強(qiáng)緩存情況下,只要緩存還沒過期,就會直接從緩存中讀取數(shù)據(jù),就算服務(wù)端有變化,也不會從服務(wù)端獲取更新后的數(shù)據(jù),這就就會導(dǎo)致無法獲取到最新的數(shù)據(jù)。

    解決的辦法有:在修改后的資源加上隨機(jī)數(shù),確保不會從緩存中讀取。

    例如:
    http://www.example.com/common.css?v=110
    http://www.example.com/common.111.css

  2. 盡量減少 304 的請求,因為我們知道,協(xié)商緩存每次都會與后臺服務(wù)器進(jìn)行交互,所以性能上不是很好,從性能上來看盡量多使用強(qiáng)緩存。

  3. 在 Firefox 瀏覽器上,使用 Cache-Control: no-cache 是不生效的,其識別的是 no-store。這樣能達(dá)到其他瀏覽器使用 Cache-Control: no-cache 的效果,所以為了兼容 Firefox 瀏覽器,經(jīng)常會寫成 Cache-Control: no-cache, no-store。

  4. 與緩存相關(guān)的幾個 header 屬性:Vary、Date / Age。

    Vary:
    Vary 本身是“變化”的意思,而在 HTTP 報文中更趨于是“vary from”(與。。。不同)的含義,它表示服務(wù)端會以什么基準(zhǔn)字段來區(qū)分、篩選緩存版本。

    在服務(wù)端有著這么一個地址,如果是 IE 用戶則返回針對 IE 開發(fā)的內(nèi)容,否則返回另一個主流瀏覽器版本的內(nèi)容。

    格式:Vary: User-Agent

    知會代理服務(wù)器需要以 User-Agent 這個請求首部字段來區(qū)分緩存版本,防止傳遞給客戶端的緩存不正確。

    Date / Age:

    響應(yīng)報文中的 Date 和 Age 字段:區(qū)分其收到的資源是否命中了代理服務(wù)器的緩存。

    Date 理所當(dāng)然是原服務(wù)器發(fā)送該資源響應(yīng)報文的時間(GMT格式),如果你發(fā)現(xiàn) Date 的時間與“當(dāng)前時間”差別較大,或者連續(xù)F5刷新發(fā)現(xiàn) Date 的值都沒變化,則說明你當(dāng)前請求是命中了代理服務(wù)器的緩存。

    Age 也是響應(yīng)報文中的首部字段,它表示該文件在代理服務(wù)器中存在的時間(秒),如文件被修改或替換,Age會重新由0開始累計。文章來源地址http://www.zghlxwxcb.cn/news/detail-459088.html

到了這里,關(guān)于前端性能優(yōu)化之HTTP緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【前端性能優(yōu)化】如何取消http請求

    【前端性能優(yōu)化】如何取消http請求

    ?創(chuàng)作者:全棧弄潮兒 ?? 個人主頁: 全棧弄潮兒的個人主頁 ??? 個人社區(qū),歡迎你的加入:全棧弄潮兒的個人社區(qū) ?? 專欄地址,歡迎訂閱:前端架構(gòu)師之路 場景一:有一個實時搜索功能,每當(dāng)用戶輸入內(nèi)容改變的時候,就會去調(diào)用一個接口,返回搜索結(jié)果數(shù)據(jù),如果

    2024年01月18日
    瀏覽(17)
  • JavaScript中的數(shù)據(jù)緩存與內(nèi)存泄露:解密前端性能優(yōu)化與代碼健康

    JavaScript中的數(shù)據(jù)緩存與內(nèi)存泄露:解密前端性能優(yōu)化與代碼健康

    ???個人主頁:前端青山 ??系列專欄:JavaScript篇 ?? 人終將被年少不可得之物困其一生 依舊 青山 ,本期給大家?guī)鞪avaScript篇專欄內(nèi)容:JavaScript-數(shù)據(jù)緩存與內(nèi)存泄露 目錄 說說你對事件循環(huán)的理解 一、是什么 二、宏任務(wù)與微任務(wù) 微任務(wù) 宏任務(wù) 三、async與await async await 四、

    2024年02月03日
    瀏覽(19)
  • 前端面試:【網(wǎng)絡(luò)協(xié)議與性能優(yōu)化】HTTP/HTTPS、TCP/IP和WebSocket

    嗨,親愛的Web開發(fā)者!在構(gòu)建現(xiàn)代Web應(yīng)用時,了解網(wǎng)絡(luò)協(xié)議是優(yōu)化性能和確保安全性的關(guān)鍵。本文將深入探討HTTP/HTTPS、TCP/IP和WebSocket這三個網(wǎng)絡(luò)協(xié)議,幫助你理解它們的作用以及如何優(yōu)化Web應(yīng)用的性能。 1. HTTP/HTTPS協(xié)議: HTTP(超文本傳輸協(xié)議): HTTP是用于在Web上傳輸數(shù)據(jù)的

    2024年02月11日
    瀏覽(27)
  • nodejs項目實戰(zhàn)教程01——http服務(wù)和URL類,前端開發(fā)社招面試解答之性能優(yōu)化

    nodejs項目實戰(zhàn)教程01——http服務(wù)和URL類,前端開發(fā)社招面試解答之性能優(yōu)化

    需要在終端重新執(zhí)行一次node app.js瀏覽器的內(nèi)容才會刷新 4.如何獲取url中的參數(shù) ============================================================================ 4.1 URL類基礎(chǔ) 建議大家可以先看看Node.js API文檔中的url 網(wǎng)址部分,這里做簡要說明。url字符串在nodejs的url模塊,有兩種解析API,其中舊版的

    2024年04月11日
    瀏覽(27)
  • web 性能優(yōu)化詳解(Lighthouse工具、優(yōu)化方式、強(qiáng)緩存和協(xié)商緩存、代碼優(yōu)化、算法優(yōu)化)

    web 性能優(yōu)化詳解(Lighthouse工具、優(yōu)化方式、強(qiáng)緩存和協(xié)商緩存、代碼優(yōu)化、算法優(yōu)化)

    優(yōu)化性能概念寬泛,可以從信號、系統(tǒng)、計算機(jī)原理、操作系統(tǒng)、網(wǎng)絡(luò)通信、DNS解析、負(fù)載均衡、頁面渲染。只要結(jié)合一個實際例子講述清楚即可。 Web?性能是客觀的衡量標(biāo)準(zhǔn),是用戶對加載時間和運行時的直觀體驗。 Web?性能指頁面加載到可交互和可響應(yīng)所消耗的時間,以

    2024年02月07日
    瀏覽(23)
  • 性能優(yōu)化之-緩存篇

    性能優(yōu)化之-緩存篇

    什么是緩存?在哪可以看到?為什么要做? 百度百科可以解釋,包含各種方向(緩存) 最常見就是目前看到這篇文章的位置-瀏覽器,打開F12, 中文漢字很好找;包括硬盤,服務(wù)器這些都是它的容器, 緩存的設(shè)置是所有現(xiàn)代計算機(jī)系統(tǒng)發(fā)揮高性能的重要因素之一。 本文簡單

    2024年02月13日
    瀏覽(27)
  • Android性能優(yōu)化—ViewPagers + Fragment緩存優(yōu)化

    Android性能優(yōu)化—ViewPagers + Fragment緩存優(yōu)化

    大家看標(biāo)題,可能會有點兒懵,什么是ViewPagers,因為在很久之前,我們使用的都是ViewPager,但是現(xiàn)在更多的是在用ViewPager2,因此用ViewPagers(ViewPager、ViewPager2)來代替兩者,主要介紹兩者的區(qū)別。 ViewPagers嵌套Fragment架構(gòu),在我們常用的App中隨處可見,抖音的首頁、各大電商

    2024年02月01日
    瀏覽(20)
  • Java架構(gòu)師緩存性能優(yōu)化

    想學(xué)習(xí)架構(gòu)師構(gòu)建流程請?zhí)D(zhuǎn):Java架構(gòu)師系統(tǒng)架構(gòu)設(shè)計

    2024年02月07日
    瀏覽(28)
  • Redis緩存設(shè)計與性能優(yōu)化

    Redis緩存設(shè)計與性能優(yōu)化

    緩存穿透是指查詢一個根本不存在的數(shù)據(jù), 緩存層和存儲層都不會命中 , 通常出于容錯的考慮, 如果從存儲層查不到數(shù)據(jù)則不寫入緩存層。 緩存穿透將導(dǎo)致不存在的數(shù)據(jù)每次請求都要到存儲層去查詢, 失去了緩存保護(hù)后端存儲的意義。 造成緩存穿透的基本原因有兩個:

    2024年02月07日
    瀏覽(19)
  • 高并發(fā)緩存實戰(zhàn)RedisSon、性能優(yōu)化

    高并發(fā)緩存實戰(zhàn)RedisSon、性能優(yōu)化

    對于經(jīng)常訪問的數(shù)據(jù)保留在redis緩存當(dāng)中,不用帶數(shù)據(jù)設(shè)置超時時間定期刪除控制redis的大小 緩存擊穿數(shù)據(jù)庫沒有被擊穿 如果商家是批量導(dǎo)入的數(shù)據(jù),呢么就會同時存到redis中,設(shè)置固定的時間就會導(dǎo)致緩存在一瞬間失效,用戶訪問不到就會將流量打到數(shù)據(jù)庫上造成數(shù)據(jù)庫段

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包