什麼資源可以協商緩存
Ⅰ 鍓嶇緙撳瓨鐨勭悊瑙 鎴栬 鍓嶇鏁版嵁鎸佷箙鍖栫殑鐞嗚В(寮哄埗緙撳瓨銆佸崗鍟嗙紦瀛)
緙撳瓨鍙浠ヨ存槸鎬ц兘浼樺寲涓綆鍗曢珮鏁堢殑涓縐嶄紭鍖栨柟寮忎簡銆備竴涓浼樼鐨勭紦瀛樼瓥鐣ュ彲浠ョ緝鐭緗戦〉璇鋒眰璧勬簮鐨勮窛紱伙紝鍑忓皯寤惰繜錛屽苟涓旂敱浜 緙撳瓨鏂囦歡鍙浠ラ噸澶嶅埄鐢 錛岃繕鍙浠ュ噺灝戝甫瀹斤紝闄嶄綆緗戠粶璐熻嵎銆
瀵逛簬涓涓鏁版嵁璇鋒眰鏉ヨ達紝鍙浠ュ垎涓哄彂璧 緗戠粶璇鋒眰銆佸悗絝澶勭悊銆佹祻瑙堝櫒鍝嶅簲 涓変釜姝ラゃ傛祻瑙堝櫒緙撳瓨鍙浠ュ府鍔╂垜浠鍦ㄧ涓鍜岀涓夋ラや腑浼樺寲鎬ц兘銆傛瘮濡傝寸洿鎺ヤ嬌鐢ㄧ紦瀛樿屼笉鍙戣搗璇鋒眰錛屾垨鑰呭彂璧蜂簡璇鋒眰浣嗗悗絝瀛樺偍鐨勬暟鎹鍜屽墠絝涓鑷達紝閭d箞灝辨病鏈夊繀瑕佸啀灝嗘暟鎹鍥炰紶鍥炴潵錛岃繖鏍峰氨鍑忓皯浜嗗搷搴旀暟鎹銆
鈶犱笉瀛樺湪璇ョ紦瀛樼粨鏋滃拰緙撳瓨鏍囪瘑錛屽己鍒剁紦瀛樺け鏁堬紝鍒欑洿鎺ュ悜鏈嶅姟鍣ㄥ彂璧瘋鋒眰
鈶″瓨鍦ㄨョ紦瀛樼粨鏋滃拰緙撳瓨鏍囪瘑錛屼絾璇ョ粨鏋滃凡澶辨晥錛屽己鍒剁紦瀛樺け鏁堬紝鍒欎嬌鐢ㄥ崗鍟嗙紦瀛
鈶㈠瓨鍦ㄨョ紦瀛樼粨鏋滃拰緙撳瓨鏍囪瘑錛屼笖璇ョ粨鏋滃皻鏈澶辨晥錛屽己鍒剁紦瀛樼敓鏁堬紝鐩存帴榪斿洖璇ョ粨鏋
鎺у埗寮哄埗緙撳瓨鐨勫瓧孌靛垎鍒鏄疎xpires鍜孋ache-Control錛屽叾涓瑿ache-Control浼樺厛綰ф瘮Expires楂樸
Cache-Control銆丒xpires閮芥槸緙撳瓨鍒版湡鏃墮棿錛孋ache-Control鏄鐩稿瑰礆紝Expires鏄緇濆瑰礆紝鍗沖啀嬈″彂閫佽鋒眰鏃訛紝濡傛灉鏃墮棿娌″埌鏈燂紝寮哄埗緙撳瓨鐢熸晥銆
娉錛氬湪鏃犳硶紜瀹氬㈡埛絝鐨勬椂闂存槸鍚︿笌鏈嶅姟絝鐨勬椂闂村悓姝ョ殑鎯呭喌涓嬶紝Cache-Control鐩告瘮浜巈xpires鏄鏇村ソ鐨勯夋嫨錛屾墍浠ュ悓鏃跺瓨鍦ㄦ椂錛屽彧鏈塁ache-Control鐢熸晥銆
鈶犲崗鍟嗙紦瀛樼敓鏁堬紝榪斿洖304
鈶″崗鍟嗙紦瀛樺け鏁堬紝榪斿洖200鍜岃鋒眰緇撴灉
榪欓噷鎴戜滑浠ュ崥瀹㈢殑璇鋒眰涓轟緥錛岀姸鎬佺爜涓虹伆鑹茬殑璇鋒眰鍒欎唬琛ㄤ嬌鐢ㄤ簡寮哄埗緙撳瓨錛岃鋒眰瀵瑰簲鐨凷ize鍊煎垯浠h〃璇ョ紦瀛樺瓨鏀劇殑浣嶇疆錛屽垎鍒涓篺rom memory cache 鍜 from disk cache銆傞偅涔坒rom memory cache 鍜 from disk cache鍙堝垎鍒浠h〃鐨勬槸浠涔堝憿錛熶粈涔堟椂鍊欎細浣跨敤from disk cache錛屼粈涔堟椂鍊欎細浣跨敤from memory cache鍛錛
from memory cache浠h〃浣跨敤 鍐呭瓨涓鐨勭紦瀛 錛宖rom disk cache鍒欎唬琛ㄤ嬌鐢ㄧ殑鏄 紜鐩樹腑鐨勭紦瀛 錛
Ⅱ 緩存策略的選擇
適合緩存的內容
1. 不變的圖像,如logo,圖標等
2. js、css靜態文件
3. 可下載的內容,媒體文件
適合協商緩存
1. HTML文件
2. 經常替換的圖片
3. 經常修改的js、css文件,js、css文件的載入可以加入文件的簽名來拒絕緩存,如『index.css?簽名』,『index.簽名.js』
不建議緩存的內容
1. 用戶隱私等敏感數據
2. 經常改變的API數據介面
NGINX配置緩存策略
本地緩存配置
1. add_header指令:添加狀態碼為2XX和3XX的響應頭信息,設置代碼add_header name value [always];,可以設置Pragma、Expires、Cache-Control,可以繼承
2. expires指令:通知瀏覽器過期時長,設置代碼expires time;
3. Etag指令:指定簽名,設置代碼etag on|off,默認on
前端代碼和資源壓縮
優勢
1. 讓資源文件更小,加快文件在網路中的傳輸,讓網頁更快的展現,降低帶寬和流量的開銷
壓縮方式
1. js、css、圖片、html代碼的壓縮
2. gzip壓縮
gzip配置
gzip on|off; #是否開啟gzipgzip_buffers 32 4K|16 8K; #緩沖(在內存中緩存幾塊?每塊多大)gzip_comp_level [1-9] #推薦6,壓縮級別(級別越高,壓得越小,越浪費CPU計算資源)
gzip_disable #正則匹配UA,什麼樣的Uri不進行gzip
gzip_min_length 200 #開始壓縮的最小長度
gzip_http_version 1.0|1.1 #開始壓縮的http協議版本
gzip_proxied #設置請求者代理伺服器,該如何緩存內容
gzip_types text/plain application/xml image/png #對哪些類型的文件壓縮,如txt、xml、css
gzip_vary on|off #是否傳輸gzip壓縮標志
CDN加速
定義
1. CDN的全稱content delivery network,內容分發網路
2. 盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定
3. 在網路各處放置節點伺服器所構成的有的互聯網基礎之上的一層智能虛擬網路
4. CDN系統能夠實現地根據網路流量和各節點的連接、負載狀況以及到用戶距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上
優勢
1. 本地cache加速,提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度
2. 跨運營商的網路加速,保證不同網路的用戶都能得到良好的訪問質量
3. 遠程訪問用戶根據DNS負載均衡技術只能選擇cache伺服器
4. 自動生成伺服器的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網路流量、減輕原站點web伺服器負載等功能
5. 廣泛分布的cdn節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵
工作原理
1. 用戶發起請求
2. 智能DNS的解析(根據IP判斷地理位置、接入網類型、選擇路由最短和負載最輕的伺服器)
3. 取得緩存伺服器ip
4. 把內容返回給用戶(如果緩存中有,沒有就執行5、6、7)
5. 向源站發起請求
6. 將結果返回給用戶
7. 將結果存入緩存伺服器
適用場景
1. 站點或者應用中大量靜態資源的加速分發,例如css、js、圖片和HTML
2. 大文件下載
3. 直播網站
獨立圖片伺服器
必要性
1. 分擔web伺服器的I/O負載,將耗費資源的圖片伺服器分離出來,提高伺服器的性能和穩定性
2. 能夠專門對圖片伺服器進行優化,為圖片伺服器設置針對性的緩存方案,減少帶寬成本,提高訪問速度
3. 提高網站的可擴展性,通過增加圖片伺服器,提高圖片吞吐能力
採用獨立域名
原因:
1. 同一域名下瀏覽器的並發連接數有限制,突破瀏覽器連接數的限制
2. 由於cookie的原因,對緩存不利,大部分web cache都只緩存不帶cookie的請求,導致每次的圖片請求都不能命中cache
如何圖片上傳和同步
1. NFS共享方式
2. 利用FTP同步
動態語言靜態化
將現有的PHP等動態語言的邏輯代碼生成為靜態的HTML文件,用戶訪問動態腳本重定向到靜態HTML文件的過程。對實時性要求不高
原因:
1. 動態腳本通過會做邏輯計算和數據查詢,訪問量越大,伺服器壓力越大
2. 訪問量大時可能會造成CPU負載過高,資料庫伺服器壓力過大
3. 靜態化可以減低邏輯處理壓力,降低資料庫伺服器查詢壓力
實現方法
1. 使用模板引擎
2. 利用ob系列函數
需要獲取swoole、workerman、TP、laravel、vue、Linux、redis以及性能優化,並發項目實戰,微服務 架構方面的資料,可以私信我哦