首先我們看圖說話
這是在沒有緩存的情況下,這個(gè)頁面發(fā)送了很多靜態(tài)資源的請(qǐng)求:
可以看到,靜態(tài)資源占用了整個(gè)頁面加載用時(shí)的90%以上,而且這個(gè)靜態(tài)資源還是已經(jīng)在我使用了nginx配置壓縮以后的大小,如果沒有對(duì)這些靜態(tài)資源壓縮的話,那么靜態(tài)資源加載應(yīng)該會(huì)占用這個(gè)頁面展示99%以上的時(shí)間。聽起來是不是已經(jīng)被嚇到了,但是數(shù)據(jù)已經(jīng)擺在這里了,這可不是危言聳聽。
然后再看看使用了nginx緩存之后的效果圖:
看到?jīng)]有,朋友們,整個(gè)頁面只有請(qǐng)求接口的時(shí)間和從本地磁盤加載css的時(shí)間。頁面加載速度直接提升10倍以上!并且由于我這個(gè)頁面沒有采用前后端分離的方式,所以html沒有緩存下來,如果采用了前后端分離架構(gòu)的話,就連html都可以直接緩存,那提升的速度可想而知。當(dāng)然由于瀏覽器或者手機(jī)端對(duì)頁面加載的優(yōu)化我們并不能很直觀的感受到10倍的提升,實(shí)際上以肉眼觀察的話,差不多減少了一半的時(shí)間,并且由于并沒有向后端服務(wù)器請(qǐng)求這些靜態(tài)資源,也相當(dāng)于對(duì)后端服務(wù)器做了一層保護(hù)措施。
首先在http模塊加配置:
# 開啟gzip gzip on; # 啟用gzip壓縮的最小文件,小于設(shè)置值的文件將不會(huì)壓縮 gzip_min_length 1k; # gzip 壓縮級(jí)別,1-10,數(shù)字越大壓縮的越好,也越占用CPU時(shí)間。一般設(shè)置1和2 gzip_comp_level 2; # 進(jìn)行壓縮的文件類型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 是否在http header中添加Vary: Accept-Encoding,建議開啟 gzip_vary on; # 禁用IE 6 gzip gzip_disable "MSIE [1-6]\."; # 設(shè)置緩存路徑并且使用一塊最大100M的共享內(nèi)存,用于硬盤上的文件索引,包括文件名和請(qǐng)求次數(shù),每個(gè)文件在1天內(nèi)若不活躍(無請(qǐng)求)則從硬盤上淘汰,硬盤緩存最大10G,滿了則根據(jù)LRU算法自動(dòng)清除緩存。 proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
關(guān)于模塊以及nginx配置信息在上一篇文章有說明。
可以看到在http模塊中主要是使用gzip壓縮,最后一個(gè)配置才是和緩存有關(guān)的配置。
然后是server中加上location配置
location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png)$ { log_not_found off; # 關(guān)閉日志 access_log off; # 緩存時(shí)間7天 expires 7d; # 源服務(wù)器 proxy_pass http://localhost:8888; # 指定上面設(shè)置的緩存區(qū)域 proxy_cache imgcache; # 緩存過期管理 proxy_cache_valid 200 302 1d; proxy_cache_valid 404 10m; proxy_cache_valid any 1h; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; }
加上這兩塊配置之后,就能享受到緩存給你帶來的快樂了。當(dāng)然系統(tǒng)優(yōu)化之路還是相當(dāng)漫長(zhǎng)的,nginx緩存只是其中的一塊而已,想要把系統(tǒng)達(dá)到完美還需要在很多地方下功夫,比如這些靜態(tài)資源完全可以直接在客戶端緩存,這樣連請(qǐng)求都不會(huì)往服務(wù)端發(fā)了,更大的減輕服務(wù)器的壓力。
評(píng)論