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

前端緩存機(jī)制

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

瀏覽器的localStorage和sessionStorage等不屬于瀏覽器的緩存概念,準(zhǔn)確的說應(yīng)該屬于“瀏覽器的本地存儲”不要講兩者混淆。
從緩存位置上來說一般有以下四種,依次是:
Memory Cache、Service Worker Cache、Disk Cache、Push Cache
前端緩存機(jī)制,前端,緩存

  • MemoryCache,是指存在內(nèi)存中的緩存。從優(yōu)先級上來說,它是瀏覽器最先嘗試去命中的一種緩存。從效率上來說,它是響應(yīng)速度最快的一種緩存。瀏覽器秉承的是“節(jié)約原則”,我們發(fā)現(xiàn),Base64 格式的圖片,幾乎永遠(yuǎn)可以被塞進(jìn) memory cache,這可以視作瀏覽器為節(jié)省渲染開銷的“自保行為”;此外,體積不大的 JS、CSS 文件,也有較大地被寫入內(nèi)存的幾率——相比之下,較大的 JS、CSS 文件就沒有這個待遇了,內(nèi)存資源是有限的,它們往往被直接甩進(jìn)磁盤。一旦我們關(guān)閉 Tab 頁面,內(nèi)存中的緩存也就被釋放了。
  • Service Worker, 是一種獨(dú)立于主線程之外的 Javascript 線程。它脫離于瀏覽器窗體,因此無法直接訪問 DOM。這樣獨(dú)立的個性使得 Service Worker 的“個人行為”無法干擾頁面的性能,這個“幕后工作者”可以幫我們實現(xiàn)離線緩存、消息推送和網(wǎng)絡(luò)代理等功能。我們借助 Service worker 實現(xiàn)的離線緩存就稱為 Service Worker Cache。
  • Disk Cache(HTTP Cache),Disk Cache 也就是存儲在硬盤中的緩存,讀取速度慢點(diǎn),但是什么都能存儲到磁盤中,比之 Memory Cache 勝在容量和存儲時效性上。在所有瀏覽器緩存中,Disk Cache 覆蓋面基本是最大的。它會根據(jù) HTTP Header 中的字段判斷哪些資源需要緩存,哪些資源可以不請求直接使用,哪些資源已經(jīng)過期需要重新請求。并且即使在跨站點(diǎn)的情況下,相同地址的資源一旦被硬盤緩存下來,就不會再次去請求數(shù)據(jù)。絕大部分的緩存都來自 Disk Cache,關(guān)于 HTTP 的協(xié)議頭中的緩存字段,我們會在下文進(jìn)行詳細(xì)介紹。它又分為強(qiáng)緩存和協(xié)商緩存。
  • Push Cache,Push Cache 是指 HTTP2 在 server push 階段存在的緩存。
    Push Cache 是緩存的最后一道防線。瀏覽器只有在 Memory Cache、HTTP Cache 和 Service Worker Cache 均未命中的情況下才會去詢問 Push Cache。
    Push Cache(推送緩存) 是一種存在于會話階段的緩存,當(dāng) session 終止時,緩存也隨之釋放。
    不同的頁面只要共享了同一個 HTTP2 連接,那么它們就可以共享同一個 Push Cache。

瀏覽器緩存的兩種方式

本地緩存階段(也稱強(qiáng)緩存):

先在本地查找該資源,如果有發(fā)現(xiàn)該資源,而且該資源還沒有過期,就使用這一個資源,完全不會發(fā)送http請求到服務(wù)器;

協(xié)商緩存階段(也稱弱緩存):

如果在本地緩存找到對應(yīng)的資源,但是不知道該資源是否過期或者已經(jīng)過期,則發(fā)一個http請求到服務(wù)器,然后服務(wù)器判斷這個請求,如果請求的資源在服務(wù)器上沒有改動過,則返回304,讓瀏覽器使用本地找到的那個資源;

Cache-Control

  • max-age(單位為s)指定設(shè)置緩存最大的有效時間,定義的是時間長短。當(dāng)瀏覽器向服務(wù)器發(fā)送請求后,在max-age這段時間里瀏覽器就不會再向服務(wù)器發(fā)送請求了(強(qiáng)緩存)。
  • s-maxage(單位為s)同max-age,只用于共享緩存(比如CDN緩存)。比如,當(dāng)s-maxage=60時,在這60秒中,即使更新了CDN的內(nèi)容,瀏覽器也不會進(jìn)行請求。也就是說max-age用于普通緩存,而s-maxage用于代理緩存。如果存在s-maxage,則會覆蓋掉max-age和Expires header。
  • no-cache 指定不緩存響應(yīng),表明資源不進(jìn)行緩存,但是設(shè)置了 no-cache 之后并不代表瀏覽器不緩存,而是在獲取緩存前要向服務(wù)器確認(rèn)資源是否被更改。因此有的時候只設(shè)置 no-cache 防止緩存還是不夠保險,還可以加上 private 指令,將過期時間設(shè)為過去的時間。(no-cache 繞開了瀏覽器:我們?yōu)橘Y源設(shè)置了 no-cache 后,每一次發(fā)起請求都不會再去詢問瀏覽器的緩存情況,而是直接向服務(wù)端去確認(rèn)該資源是否過期,即走協(xié)商緩存的路線)(協(xié)商緩存
  • no-store 絕對禁止緩存,如果用了這個命令就是不會進(jìn)行緩存,每次請求資源都要從服務(wù)器重新獲取。(no-store 比較絕情,顧名思義就是不使用任何緩存策略。在 no-cache 的基礎(chǔ)上,它連服務(wù)端的緩存確認(rèn)也繞開了,只允許你直接向服務(wù)端發(fā)送請求、并下載完整的響應(yīng)。)

Expires(強(qiáng)緩存)

Expires字段的作用是,設(shè)定一個強(qiáng)緩存時間。在此時間范圍內(nèi),則從內(nèi)存(或磁盤)中讀取緩存返回。比如說將某一資源設(shè)置響應(yīng)頭為:Expires:new Date(“2022-7-30 23:59:59”);那么,該資源在2022-7-30 23:59:59 之前,都會去本地的磁盤(或內(nèi)存)中讀取,不會去服務(wù)器請求。但是,Expires已經(jīng)被廢棄了。對于強(qiáng)緩存來說,Expires已經(jīng)不是實現(xiàn)強(qiáng)緩存的首選。

因為Expires判斷強(qiáng)緩存是否過期的機(jī)制是:獲取本地時間戳,并對先前拿到的資源文件中的Expires字段的時間做比較。來判斷是否需要對服務(wù)器發(fā)起請求。這里有一個巨大的漏洞:“如果我本地時間不準(zhǔn)咋辦?”
是的,Expires過度依賴本地時間,如果本地與服務(wù)器時間不同步,就會出現(xiàn)資源無法被緩存或者資源永遠(yuǎn)被緩存的情況。所以,Expires字段幾乎不被使用了?,F(xiàn)在的項目中,我們并不推薦使用Expires,強(qiáng)緩存功能通常使用cache-control字段來代替Expires字段。

基于last-modified的協(xié)商緩存

基于last-modified的協(xié)商緩存實現(xiàn)方式是:

  • 首先需要在服務(wù)器端讀出文件修改時間,
  • 將讀出來的修改時間賦給響應(yīng)頭的last-modified字段。
  • 最后設(shè)置Cache-control:no-cache
    三步缺一不可。
    前端緩存機(jī)制,前端,緩存
    注意圈出來的三行。
    第一行,讀出修改時間。
    第二行,給該資源響應(yīng)頭的last-modified字段賦值修改時間
    第三行,給該資源響應(yīng)頭的Cache-Control字段值設(shè)置為:no-cache.(上文有介紹,Cache-control:no-cache的意思是跳過強(qiáng)緩存校驗,直接進(jìn)行協(xié)商緩存。)
    還沒完。到這里還無法實現(xiàn)協(xié)商緩存
    當(dāng)客戶端讀取到last-modified的時候,會在下次的請求標(biāo)頭中攜帶一個字段:If-Modified-Since。
    前端緩存機(jī)制,前端,緩存

基礎(chǔ)ETag的協(xié)商緩存

ETag就是將原先協(xié)商緩存的比較時間戳的形式修改成了比較文件指紋。

文件指紋:根據(jù)文件內(nèi)容計算出的唯一哈希值。文件內(nèi)容一旦改變則指紋改變。

我們來看一下流程↓

  1. 第一次請求某資源的時候,服務(wù)端讀取文件并計算出文件指紋,將文件指紋放在響應(yīng)頭的etag字段中跟資源一起返回給客戶端。
  2. 第二次請求某資源的時候,客戶端自動從緩存中讀取出上一次服務(wù)端返回的ETag也就是文件指紋。并賦給請求頭的if-None-Match字段,讓上一次的文件指紋跟隨請求一起回到服務(wù)端。
  3. 服務(wù)端拿到請求頭中的is-None-Match字段值(也就是上一次的文件指紋),并再次讀取目標(biāo)資源并生成文件指紋,兩個指紋做對比。如果兩個文件指紋完全吻合,說明文件沒有被改變,則直接返回304狀態(tài)碼和一個空的響應(yīng)體并return。如果兩個文件指紋不吻合,則說明文件被更改,那么將新的文件指紋重新存儲到響應(yīng)頭的ETag中并返回給客戶端

前端緩存機(jī)制,前端,緩存本文參考:
https://juejin.cn/post/7127194919235485733
https://www.jianshu.com/p/cb72dfb0f7b3文章來源地址http://www.zghlxwxcb.cn/news/detail-814972.html

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

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

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

相關(guān)文章

  • Redis緩存問題與緩存更新機(jī)制

    Redis緩存問題與緩存更新機(jī)制

    目錄 ?編輯 ?一、緩存問題 ?1.1 緩存穿透 ?1.1.1 問題來源 ?1.1.2 解決方案 ?1.1.2.1 緩存空對象 ?1.1.2.2 使用布隆過濾器 ?1.2 緩存擊穿 ?1.2.1 問題來源 ?1.2.2 解決方案 ?1.2.2.1 設(shè)置熱點(diǎn)數(shù)據(jù)永遠(yuǎn)不過期 ?1.2.2.2 新增后臺定時更新緩存線程(邏輯不過期) ?1.2.2.3 使用分布式互斥鎖

    2024年02月12日
    瀏覽(14)
  • 強(qiáng)緩存、協(xié)商緩存(瀏覽器的緩存機(jī)制)是么子?

    強(qiáng)緩存、協(xié)商緩存(瀏覽器的緩存機(jī)制)是么子?

    為了減少資源請求次數(shù),加快資源訪問速度,瀏覽器會對資源文件如圖片、css文件、js文件等進(jìn)行緩存 所謂強(qiáng)緩存,可以理解為強(qiáng)制緩存的意思,即瀏覽器在訪問某個資源時會判斷是否使用本地緩存里已經(jīng)存在的資源文件,使用本地緩存的話則不會發(fā)送請求到服務(wù)器,從而達(dá)

    2024年01月20日
    瀏覽(21)
  • 【數(shù)據(jù)庫】聊聊MVCC機(jī)制與BufferPool緩存機(jī)制

    【數(shù)據(jù)庫】聊聊MVCC機(jī)制與BufferPool緩存機(jī)制

    上一篇文章,介紹了隔離級別,MySQL默認(rèn)是使用可重復(fù)讀,但是在可重復(fù)讀的級別下,可能會出現(xiàn)幻讀,也就是讀取到另一個session添加的數(shù)據(jù),那么除了配合使用間隙鎖的方式,還使用了MVCC機(jī)制解決,保證在可重復(fù)讀的場景下,同一個session讀取的數(shù)據(jù)一致性。 MVCC(Multi-Vers

    2024年01月20日
    瀏覽(20)
  • 瀏覽器緩存機(jī)制

    瀏覽器緩存機(jī)制

    什么是瀏覽器緩存 瀏覽器緩存就是瀏覽器根據(jù) url 第一次訪問網(wǎng)站之后,將網(wǎng)站的 html、css、js、圖片等文件復(fù)制一份保留到瀏覽器中,當(dāng)你二次訪問這個 url 的網(wǎng)站時,如果網(wǎng)站沒有明確表示有更新時,瀏覽器直接在緩存中查找內(nèi)容,不會再次請求網(wǎng)頁內(nèi)容,只有網(wǎng)頁明確表

    2024年02月04日
    瀏覽(27)
  • Spring 的三級緩存機(jī)制

    Spring 的三級緩存機(jī)制

    Spring 的三級緩存機(jī)制 Spring 的三級緩存機(jī)制是解決循環(huán)依賴的關(guān)鍵 。 Spring 框架為了解決循環(huán)依賴問題,設(shè)計了一套三級緩存機(jī)制。這三級緩存分別是: 一級緩存 singletonObjects :這是最常規(guī)的緩存,用于存放完全初始化好的 bean。如果某個 bean 已經(jīng)在這個緩存中,則直接返回

    2024年04月26日
    瀏覽(21)
  • 深入剖析MyBatis緩存機(jī)制

    深入剖析MyBatis緩存機(jī)制

    第1章:引言 大家好,我是小黑。今天我們要聊的是MyBatis的緩存機(jī)制。作為Java開發(fā)中經(jīng)常使用的持久層框架,MyBatis以其靈活性和簡便性而廣受歡迎。但你知道嗎,很多時候,正是因為這些特點(diǎn),我們需要更深入地理解它的內(nèi)部工作原理,尤其是緩存機(jī)制。這不僅能幫助我們

    2024年01月21日
    瀏覽(21)
  • tomcat 的緩存機(jī)制

    HTTP緩存:Tomcat支持HTTP緩存機(jī)制,可以通過設(shè)置響應(yīng)頭中的Cache-Control、Expires和ETag等字段來控制緩存策略。這些字段告訴瀏覽器是否可以緩存響應(yīng)以及緩存的有效期等信息。 Servlet緩存:Tomcat還提供了Servlet緩存機(jī)制,它可以緩存Servlet的響應(yīng)內(nèi)容,避免重復(fù)生成相同的響應(yīng)。通

    2024年02月09日
    瀏覽(9)
  • Spark RDD 緩存機(jī)制

    Spark RDD 緩存是在內(nèi)存存儲RDD計算結(jié)果的一種優(yōu)化技術(shù)。把中間結(jié)果緩存起來以便在需要的時候重復(fù)使用,這樣才能有效減輕計算壓力,提升運(yùn)算性能。 當(dāng)對RDD執(zhí)行持久化操作時,每個節(jié)點(diǎn)都會將自己操作的RDD的partition持久化到內(nèi)存中,并且在之后對該RDD的反復(fù)使用中,直接

    2024年03月25日
    瀏覽(12)
  • mybatis的緩存機(jī)制

    mybatis的緩存機(jī)制

    視頻教程_免費(fèi)高速下載|百度網(wǎng)盤-分享無限制 (baidu.com) MyBatis 有一套靈活而強(qiáng)大的緩存機(jī)制,主要分為兩級緩存:一級緩存(本地緩存)和二級緩存(全局緩存)。 一級緩存(本地緩存) : 一級緩存是 MyBatis 默認(rèn)開啟的緩存,它指的是在同一個 SqlSession 中執(zhí)行相同 SQL 語句

    2024年01月19日
    瀏覽(13)
  • Mybatis執(zhí)行流程、緩存機(jī)制、插件

    Mybatis執(zhí)行流程、緩存機(jī)制、插件

    目錄 一.傳統(tǒng)的JDBC連接數(shù)據(jù)庫 二.Mybatis(ORM框架) 1.什么是ORM框架 2.Mybatis特性 三.MyBatis緩存機(jī)制 1.一級緩存 2.二級緩存 3.一二級緩存很雞肋 四.Mybayis插件 插件的工作流程 多個插件的順序 五.Mybatis執(zhí)行流程 1.初始化解析配置文件 2.創(chuàng)建sqlSession會話 3.獲取mapper代理對象 4.調(diào)用map

    2024年02月04日
    瀏覽(15)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包