浏览器缓存,想说爱你不容易_html/css_WEB-ITnose
今天小微开店宝在测试环境发布更新的时候,同事问:“为什么我需要手动清理浏览器缓存才能看到变更?难道系统上线后也需要客户自己清理浏览器缓存吗!”看来,这个坑需要我来填了。
什么是浏览器缓存浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
浏览器缓存的优点有:
- 减少了冗余的数据传输,节省了网费
- 减少了服务器的负担,大大提升了网站的性能
- 加快了客户端加载网页的速度
在前端开发面试中,浏览器缓存是web性能优化面试题中很重要的一个知识点,从而说明浏览器缓存是提升web性能的一大利器,但是浏览器缓存如果使用不当,也会产生很多问题,正所谓是,想说爱你,并不是很容易的事。所以,结合最近遇到的案例,本文对浏览器缓存相关的知识进行总结归纳,希望对读者有所帮助。
浏览器缓存的分类浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存。
浏览器在第一次请求发生后,再次请求时:
- 浏览器会先获取该资源缓存的header信息,根据其中的expires和cahe-control判断是否命中强缓存,若命中则直接从缓存中获取资源,包括缓存的header信息,本次请求不会与服务器进行通信;
- 如果没有命中强缓存,浏览器会发送请求到服务器,该请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/IF-Modified-Since、Etag/IF-None-Match),由服务器根据请求中的相关header信息来对比结果是否命中协商缓存,若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容
强缓存
强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间。
Expires
该字段是http1.0时的规范,它的值为一个绝对时间的GMT格式的时间字符串,比如Expires:Mon,18 Oct 2066 23:59:59 GMT。这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。
Cache-Control
Cache-Control是http1.1时出现的header信息,主要是利用该字段的max-age值来进行判断,它是一个相对时间,例如Cache-Control:max-age=3600,代表着资源的有效期是3600秒。cache-control除了该字段外,还有下面几个比较常用的设置值:
Cache-Control与Expires可以在服务端配置同时启用,同时启用的时候Cache-Control优先级高。
协商缓存
协商缓存就是由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问,这主要涉及到下面两组header字段,这两组搭档都是成对出现的,即第一次请求的响应头带上某个字段(Last-Modified或者Etag),则后续请求则会带上对应的请求字段(If-Modified-Since或者If-None-Match),若响应头没有Last-Modified或者Etag字段,则请求头也不会有对应的字段。
Last-Modify/If-Modify-Since
浏览器第一次请求一个资源的时候,服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间,例如Last-Modify: Thu,31 Dec 2037 23:59:59 GMT。
当浏览器再次请求该资源时,request的请求头中会包含If-Modify-Since,该值为缓存之前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源的最后修改时间判断是否命中缓存。
如果命中缓存,则返回304,并且不会返回资源内容,并且不会返回Last-Modify。
ETag/If-None-Match
与Last-Modify/If-Modify-Since不同的是,Etag/If-None-Match返回的是一个校验码。ETag可以保证每一个资源是唯一的,资源变化都会导致ETag变化。服务器根据浏览器上送的If-None-Match值来判断是否命中缓存。
与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。
为什么要有Etag
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
强缓存与协商缓存的区别可以用下表来表示:
|获取资源形式|状态码|发送请求到服务器
------|------------|------|----------------
强缓存|从缓存取 |200(from cache)|否,直接从缓存取
协商缓存|从缓存取|304(Not Modified)|否,通过服务器来告知缓存是否可用
地址栏回车 | 有效 | 有效 |
页面链接跳转 | 有效 | 有效 |
新开窗口 | 有效 | 有效 |
前进回退 | 有效 | 有效 |
F5刷新 | 无效 | 有效 |
Ctrl+F5强制刷新 | 无效 | 无效 |
如文章开头所属,代码更新到线上后用户浏览器不能自行更新,我们不能要求客户在系统更新后都进行一次缓存清理的操作。
到底该如何解决呢?
在资源请求的URL中增加一个参数,比如:js/mian.js?ver=0.7.1。这个参数是一个版本号,每一次部署的时候变更一下,当这个参数变化的时候,强缓存都会失效并重新加载。这样一来,静态资源,部署以后就需要重新加载。这样就比较完美的解决了问题。
进一步思考这样做是不是最完美的呢?很遗憾,不是。
百度张云龙给出了这样做的弊端,有兴趣可参照下文:
静态资源版本更新与缓存
谢谢!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Windows作業系統使用快取來儲存DNS條目。 DNS(網域名稱系統)是用於通訊的網際網路核心技術。特別是用於查找網域的IP位址。當使用者在瀏覽器中鍵入網域名稱時,載入網站時執行的首要任務之一是尋找其IP位址。該過程需要訪問DNS伺服器。通常,網路服務供應商的DNS伺服器會自動使用,但管理員可能會切換到其他DNS伺服器,因為這些伺服器可能更快或提供更好的隱私。如果DNS用於阻止對某些網站的訪問,則切換DNS提供者也可能有助於繞過Internet審查。 Windows使用DNS解

什麼是緩存?快取(發音為ka·shay)是一種專門的高速硬體或軟體元件,用於儲存經常要求的資料和指令,這些資料和指令又可用於更快地載入網站、應用程式、服務和系統的其他部分。快取使最常存取的資料隨時可用。快取檔案與快取記憶體不同。快取文件是指經常需要的文件,如PNG、圖標、徽標、著色器等,多個程式可能需要這些文件。這些檔案儲存在您的實體磁碟機空間中,通常是隱藏的。另一方面,高速緩存記憶體是一種比主記憶體和/或RAM更快的記憶體類型。它極大地減少了資料存取時間,因為與RAM相比,它更靠近CPU並且速度

對於不熟悉這個術語的人來說,清空快取意味著清空它,本文將向您展示如何在 Windows 11 中輕鬆完成。如果您仍然想知道快取檔案是什麼,您應該知道它並不像聽起來那樣技術性。考慮到計算機,快取是將來可能再次需要的非永久文件(或文件)。因此,快取在那個時間到來之前一直是隱藏的,從而保護了內容。快取檔案很重要,但它們也會佔用寶貴的空間。如果您的 SSD 容量有限,這可能是個問題。不過,也有一些好消息。因此,在大多數情況下,可以安全地擦除快取檔案以清理磁碟空間。清除 Windows 11 快取的重要

Safari的快取使瀏覽速度更快,但它可能會出錯,它會減慢您的Mac、iPhone或iPad的速度,並且還會佔用大量儲存空間。以下是清除它的方法和時間。與所有網頁瀏覽器一樣,Safari將資料儲存在您的Mac、iPhone和iPad上,其明確目的是加速您的線上生活。您可能擁有ApplePark認為理所當然的那種網路速度,但即便如此,最好將這種速度用於需要的地方。因此,當您重新訪問一個網站時,Safari會盡可能地讓您只需要下載已更改的內容。即使一個新聞網站整天都在更新,基本佈局,頁面的家具

如何在Safari和其他應用程式中清除iPhone和iPad上的快取蘋果瀏覽器打開設定向下滑動並點按Safari再次向下滑動並點擊清除歷史記錄和網站數據,再次點擊確認或者,如果您想清除單個網站的資料而不清除整個Safari緩存,請在Safari設定的最底部選擇「進階」>「網站資料」>「編輯」(或從右向左滑動以刪除單一項目)。請記住,從iPhone或iPad刪除的網站資料將從您登入相同iCloud帳戶的其他Apple裝置中刪除,如果它們與Safari同步。清除i

清理瀏覽器快取的方法:1、手動清理;2、使用瀏覽器設定清理;3、使用第三方工具清理;4、定期清理;5、手動刪除快取檔案;6、使用瀏覽器擴充功能清理;7 、停用瀏覽器快取;8、手動刪除Cookies及Cookie相關檔案。詳細介紹:1、手動清理,開啟瀏覽器,按下鍵盤上的Ctrl+Shift+Delete鍵,在彈出的對話方塊中,選擇「清除瀏覽資料」選項,並選擇要清除的時間範圍等等。

如何利用瀏覽器快取提升Java網站的存取速度?摘要:瀏覽器快取是提升網站效能的重要手段之一。本文將詳細介紹如何利用瀏覽器快取提升Java網站的存取速度,並附上對應的程式碼範例。一、瀏覽器快取介紹1.1什麼是瀏覽器快取?瀏覽器快取是指瀏覽器在存取一個網頁時,會將該網頁的部分或全部資源(如頁面檔案、圖片、腳本、樣式表等)儲存到本機硬碟或記憶體中,以便下次造訪時可以

1.以IE瀏覽器為例,在瀏覽器的選單列中點選工具,然後點選【internet選項】;如圖所示:2、在internet選項中,我們可以看到有一個瀏覽記錄的選項,下面有一個複選框,即【退出時刪除瀏覽歷史記錄】,選定之後,在我們關閉瀏覽器的時候,所有的緩存網頁,緩存的文字及圖片音樂視頻等就會全部刪除。當然如果你現在就想刪除,就點擊下面的那個刪除按鈕就可以現在就刪除這些快取檔案了,刪除完成點擊確定;如圖所示:3、瀏覽器的快取現在我們就清理完成了,但是有很多人用的並不是IE瀏覽器,而是其他的瀏覽器,其
