文對強緩存和弱緩存進行講解:
為了展示強緩存和弱緩存
第一步:Ctrl + shift + delete將緩存給清除
將瀏覽器的數據給清空一下
這里的數據大小是83.4kB
在響應頭里面,會存在著ETag和Last-Modified資料
第一請求和第二請求,這里多了一個If-Modified,在弱緩存當中,從緩存中獲取數據,檢驗匹配是經過多次匹配,出現304指令,
200或者304指令意味著沒有發生變化
如果是強緩存這里根本不會產生數據,強緩存的特性是存儲在用戶的本地
瀏覽器緩存相關指令
expires指令
expires:該指令用來控制頁面緩存的作用。可以通過該指令控制HTTP應 答中的“Expires"和”Cache-Control"
expires 有兩種語法,一種是time,time是時間值,它默認是以秒來計數的
no-cache,無論緩存有沒有過期,都需要發送請求,檢驗緩存有沒有過期
max-age與expires的意思差不多,只不過有的沒有這個配置,
epoch會指定1970的時間,max是2037年的時間
具體配置流程:
vim ngnix.conf
為了方便對比,先將請求頭信息進行復制
之后在conf配置文件下配置
location ~ .*\.(html|js|css|png) $ {
}
以html和js和css等結尾的資源,都走這個
寫成expiress 1000;的意思是緩存1000s
檢驗語法,重新加載
重新對jQuery.js中進行查看
現在相應頭多了一塊時間max-age=1000秒和Expires:Mon.27(Expires的意思是服務器的時間)
如果將配置expiress修改為-1000,改為了負數,在請求頭中出現了no-cache
如果將該值指定為max
它會出現一些時間,默認是以秒來分割的
這個max的值是10年的意思,意思是最大的緩存時間可以已達到10年
add_header指令
add_header指令是用來添加指定的響應頭和響應值。
語法 add_header name value [always];
位置存儲在http、server、location..
如果想要到web服務器直接獲取,不緩存,用no-store
不緩存的寫法配置,在配置文件中添加add_header Cache-Control no-store
現在就實現了弱緩存,第一次訪問了304kb數據,第二次就是83.5kb,實現了弱緩存了
學Web前端要會哪些技能?瀏覽器緩存是怎么回事?緩存是現在系統中必不可少的模塊,是高并發高性能架構的一個關鍵組件。緩存適用于對數據實時性要求不高以及對性能要求高的場景中,可以有效地提升性能,緩解數據壓力。對于Web前端開發者來說,主要跟瀏覽器中的緩存打交道,接下來小編就給大家講解一下瀏覽器緩存機制。
什么是瀏覽器緩存?
瀏覽器緩存機制,其實主要就是HTTP協議定義的緩存機制(如:Expires、Cache-control等)。但是也有非HTTP協議定義的緩存機制,如使用HTML Meta標簽,Web開發者可以在HTML頁面的節點中加入標簽,代碼如下:
上述代碼的作用是告訴瀏覽器當前頁面不被緩存,每次訪問都需要去服務器拉取。使用上很簡單,但只有部分瀏覽器可以支持,而且所有緩存代理服務器都不支持,因為代理不解析HTML內容本身,而廣泛應用的還是HTTP頭信息來控制緩存。
瀏覽器對于所請求資源的緩存處理有一套完整的機制,主要包含三個策略:存儲策略、過期策略、協商策略。存儲策略發生在收到請求響應后,用于決定是否緩存相應資源;過期策略發生在請求前,用于判斷緩存是否過期;協商策略發生在請求中,用于判斷緩存資源是否更新。
緩存又分為強緩存和弱緩存(又稱為協商緩存)。其中強緩存包括Expires和Cache-Control,主要是在過期策略生效時應用的緩存。弱緩存包括Last-Modified和ETag,是在協商策略后應用的緩存。強弱緩存之間的主要區別在于獲取資源時是否會發送請求。
瀏覽器下訪問資源的方式主要有7種:
(新標簽)地址欄回車
鏈接跳轉
前進、后退
從收藏欄打開鏈接
(window.open)新開窗口
刷新(Command + R / F5)
強制刷新(Command + Shift + R / Ctrl + F5)
使用這7種方式訪問資源時,應用緩存的策略會有一些不同。需要注意的是,除此之外,還有一種特殊情況。即在當前地址欄,不改變內容,直接回車,等同于刷新當前頁。但是在當前頁點擊跳轉到自身,和鏈接跳轉一致,并不會等同于刷新。
如果想學習Web前端技術,一定要多了解一些行情。如果你沒有什么基礎,可以選擇專業的專業,深入學校好好考察,才能更客觀地了解其中的實質。
態資源上線問題。
有學員出去面試,面試官問了一個問題:如果你真的沒有做過前端的資源的上線發布,還真的不好回答。
正常前端要上線的時候,打完包之后會生成一個dist的文件夾,dist文件夾里面會扔到服務器上。這時候上完線之后,比如去請求頁面的時候,基本上有js,對于用戶來說,這時候有新的東西要更新。
可以看一下,有些資源是走的緩存的,比如js資源,包括圖片資源,看走的緩存。所以對用戶來說,如果不去強制刷新頁面,不清緩存,訪問其實還是舊的業務邏輯。
打完包之后會有一個index.html,但是這里面的東西通常index.html文件本身很少去做緩存的,所以它里面index.html去上線,上完線之后放到靜態服務器上,就是它。上完之后,這里面外鏈的js是這個版本的。
比如這次更新完了之后要上線,有可能js變了,后綴名也變了,這時候要去上線。要去上線之后,用戶訪問網頁的時候,加載的index.html里面還是舊的js文件。對于舊的js文件來說,有可能對于遠端的復習上把舊的文件刪掉了,還有可能會導致前面出錯,因為請求不了js了。
因為上完線之后,js已經刪掉了。這時候一般的方案就是要不就是index.html不做緩存,每次都請求最新的。像首頁沒有緩存,每次刷新頁面都是請求新的,看到沒有?但這種方式不是特別好。
這種方式怎么做?一般在index.html里面可以加上這樣的請求頭,加上標簽,就是強制不讓它緩存。再一個就是服務是部署在nginx,在nginx里面也可以加上不讓它緩存。但是這種方法還不是最好的。
一般不管是js這種資源,還是圖片,CSS還是index.html,基本上都會做緩存的。
比如靜態資源,index.html還是圖片,都會上到cdn服務上,每一次發包的時候,它會把原來的上一個版本的靜態資源留著,也不會去刪除。像會做一個備份,根據日期做一個備份。
對于用戶來說,這個網站如果用戶沒有清緩存,訪問index.html,那么它里面那種東西還是舊的內容,js文件名也是舊的,但是在這個服務器上,我給它保留備份。
如果這時候用戶清緩存,或者打包之后,index.html的過期時間已經到了,過期時間到了,它會去請求新的,請求新的就去請求新的js文件,也就是在上線的時候,舊的靜態資源,比如在這個里面的js,都會做備份的。
但是這樣也有一個弊端,備份的內容會非常多,從二零二年的到現在的二零二四年了,都還在備份當中,因為不知道用戶什么時候去刷新頁面,有可能訪問的是舊的,一般都設置緩存時間的,index.html可能緩存個30天。
如果面試官在問你的時候,可以以這種方式給面試官聊。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。