1.緩存的好處
減少了不必要的網(wǎng)絡(luò)請(qǐng)求次數(shù),減輕了服務(wù)器的壓力,加快了瀏覽器打開網(wǎng)頁(yè)的速度;
2.強(qiáng)緩存和協(xié)商緩存策略的區(qū)別
強(qiáng)緩存:瀏覽器不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接根據(jù)max-age和Expires首部字段判斷是否使用本地緩存;
協(xié)商緩存:瀏覽器會(huì)向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求攜帶首部字段If-None-match和If-Modified-Since,和請(qǐng)求資源的ETag和Last-Modified字段比較,根據(jù)結(jié)果判斷是否使用本地緩存;
3.本地緩存分類
memory cache:內(nèi)存緩存,一般腳本,圖片,字體會(huì)緩存在內(nèi)存中;
disk cache:硬盤緩存,一般非腳本文件(如css文件)會(huì)緩存在硬盤中;
4.瀏覽器緩存的詳細(xì)過程
1.瀏覽器第一次加載資源文件,會(huì)將服務(wù)器返回的資源文件和響應(yīng)首部字段一并緩存下來(lái);
2.瀏覽器下一次請(qǐng)求該資源文件的時(shí)候,先比較當(dāng)前時(shí)間和上一次響應(yīng)的時(shí)間差是否小于Cache-Control字段的max-age值,如果小于則命中強(qiáng)緩存,直接從本地緩存加載文件;否則瀏覽器會(huì)向服務(wù)器發(fā)送攜帶If-None-match和If-Modified-Since首部字段的請(qǐng)求(如果瀏覽器不支持http1.1會(huì)用Expires進(jìn)行判斷);
3.服務(wù)器接收到請(qǐng)求后,會(huì)比較資源文件的ETag和請(qǐng)求首部字段If-None-match,不一致則表示資源文件有改動(dòng),返回新的資源文件和ETag,一致則進(jìn)入下一步;
4.比較資源文件的Last-Modified和請(qǐng)求首部字段If-Modified-Since,不一致則表示資源文件有改動(dòng),返回新的資源文件和Last-Modified,一致則命中協(xié)商緩存,返回403 Not Modified,瀏覽器從本地緩存加載文件;
5.ETag和Last-Modified區(qū)別
1.ETag根據(jù)資源文件的內(nèi)容記錄了資源文件的每一次改動(dòng),Last-Modified記錄了資源文件上一次改動(dòng)的時(shí)間,精確度為秒;
2.服務(wù)器校驗(yàn)時(shí)ETag的優(yōu)先級(jí)高于Last-Modified,但是ETag更加耗費(fèi)服務(wù)器性能;
6.用戶行為對(duì)于瀏覽器緩存的影響
點(diǎn)擊頁(yè)面刷新按鈕和F5刷新:向服務(wù)器發(fā)送請(qǐng)求,會(huì)走協(xié)商緩存;
Ctrl+F5強(qiáng)制刷新:不走強(qiáng)緩存和協(xié)商緩存,服務(wù)器每次都返回最新的資源文件;
7.瀏覽器緩存流程圖
