一屡萤、HTTP緩存機(jī)制
高并發(fā)下只能通過提升服務(wù)器負(fù)載解決?
緩存只能做數(shù)據(jù)庫緩存捎拯?
啟用瀏覽器緩存
緩存分類:
HTTP緩存模型中坤按,如果請求成功會有三種情況
- 1毯欣、200 from cache:直接從本地緩存中獲取響應(yīng),最快速臭脓,最省流量酗钞,因?yàn)楦緵]有向服務(wù)器發(fā)送請求。
- 2来累、304 Not Modified:協(xié)商緩存瀏覽器在本地沒有命中的情況下砚作,請求頭中發(fā)送一定的教驗(yàn)數(shù)據(jù)到服務(wù)端,如果服務(wù)端數(shù)據(jù)沒有改變?yōu)g覽器從本地緩存響應(yīng)佃扼,返回304偎巢。
快速蔼夜,發(fā)送的數(shù)據(jù)很少兼耀,只返回一些基本的響應(yīng)頭信息,數(shù)據(jù)量很小求冷,不發(fā)送實(shí)際響應(yīng)體瘤运。 - 3、200 OK:以上兩種緩存全部失敗匠题,服務(wù)器返回完整響應(yīng)拯坟。沒有用到緩存相對最慢。
常見狀態(tài)碼
狀態(tài)碼 | 說明 |
---|---|
200 | 服務(wù)器成功返回網(wǎng)頁 |
301/2 | 永久/臨時重定向 |
304 | Not Modified 未修改 |
307 | 重定向中保持原有的請求數(shù)據(jù) |
404 | 請求的網(wǎng)頁不存在 |
503 | 服務(wù)器暫時不可用 |
500 | 服務(wù)器內(nèi)部錯誤 |
本地緩存
瀏覽器如果認(rèn)為本地緩存能使用韭山,不會去請求服務(wù)端郁季。
相關(guān)header
Pragma:HTTP1.0時代的冷溃,該字段被設(shè)置未no-cache時,會告知瀏覽器禁用本地緩存梦裂。
Expires:HTTP1.0時代的似枕,緩存過期時間。瀏覽器與服務(wù)器時間無法保持一致年柠,如果差距過大凿歼,就會影響緩存結(jié)果。
Cache-Control:HTTP1.1冗恨,緩存過期的時間間隔答憔。
優(yōu)先級 Pragma > Cache-Control > Expires
協(xié)商緩存
瀏覽器在本地沒有命中的情況下,請求頭中發(fā)送一定的教驗(yàn)數(shù)據(jù)到服務(wù)端掀抹,如果服務(wù)端數(shù)據(jù)沒有修改虐拓,瀏覽器使用本地緩存
相關(guān)header
Last—Moidfied
If-Modified-Since
ETag HTTP1.1推出,文件的指紋標(biāo)識符渴丸。
If-None-Matche:本地緩存失敗侯嘀,會攜帶此值去請求服務(wù)端
緩存策略的選擇
適合緩存的內(nèi)容
不變的圖像、js谱轨、css戒幔、可下載的內(nèi)容、媒體文件
建議使用協(xié)商緩存
HTML文件土童、經(jīng)常替換的圖片诗茎、經(jīng)常修改的js、
二献汗、Nginx配置緩存策略
add_header指令:添加狀態(tài)碼為2XX和3XX的響應(yīng)頭信息
add_header name value [awalys’];
可以設(shè)置Progma/Expires/Cache-Control敢订,可以繼承
本地緩存配置
expires指令:通知瀏覽器過期時長
expires time;
為負(fù)值時表示Cache-Control: no-cache
為正值或者0就表示Cache-Control:max-age=指定的時間
協(xié)商緩存配置
etag 默認(rèn)開啟
三、前端代碼和資源的壓縮
讓資源文件更小罢吃,傳輸更快
js楚午、css、圖片尿招、html
Gzip壓縮
- js 去除空白符和注釋矾柜,替換長變量名
- css類似js
- html 不建議壓縮可以用Gzip壓縮
- 圖片壓縮 tinypng jpegMini ImageOptim
- Gzip壓縮 nginx配置 gzip on|off