国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

前端開發必須了解的 Nginx 單頁加載優化

開發 前端
本文介紹從一個前端的角度簡單介紹一下頁面加載的優化工作。一起來看看吧。

 

從一個前端的角度簡單介紹一下頁面加載的優化工作。

網頁加載

首先我們要看一下我們網頁加載到底中間是個什么流程,那些東西比較耗費時間,比如我們訪問github:

  •  Queued、Queueing:如果是HTTP/1.1的話,會有隊頭阻塞,瀏覽器對每個域名最多開 6 個并發連接。
  •  Stalled:瀏覽器要預先分配資源,調度連接。
  •  DNS Lookup:DNS解析域名。
  •  Initial connection、SSL:與服務器建立連接,TCP握手,當然你是https的話還有TLS握手。
  •  Request sent:服務器發送數據。
  •  TTFB:等待返回的數據,網絡傳輸,也就是首字節響應時間。
  •  Content Dowload:接收數據。

從圖中可以看出從與服務器建立連接,到接收數據,這里的時間花費是非常多的,當然還有DNS解析,不過這里有本地緩存,所以基本沒有時間。

gzip-減少加載體積

首先我們可以通過gzip對我們的js以及css進行壓縮:vue.config.js: 

  1. const CompressionWebpackPlugin = require('compression-webpack-plugin')  
  2. buildcfg = {  
  3.   productionGzipExtensions: ['js', 'css']  
  4.  
  5. configureWebpack: (config) => {  
  6.   config.plugins.push(  
  7.     new CompressionWebpackPlugin({  
  8.       test: new RegExp('\\.(' + buildcfg.productionGzipExtensions.join('|') + ')$'),  
  9.       threshold: 8192,  
  10.       minRatio: 0.8  
  11.     })  
  12.   )  

在nginx里開啟gzip:

server模塊: 

  1. # 使用gzip實時壓縮  
  2. gzip on;  
  3. gzip_min_length 1024;  
  4. gzip_buffers 4 16k;  
  5. gzip_comp_level 6;  
  6. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;  
  7. gzip_vary on;  
  8. gzip_disable "MSIE [1-6]\.";  
  9. # 使用gzip_static  
  10. gzip_static on;  
  11. # 使用gzip實時壓縮  
  12. gzip on;  
  13. gzip_min_length 1024;  
  14. gzip_buffers 4 16k;  
  15. gzip_comp_level 6;  
  16. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;  
  17. gzip_vary on;  
  18. gzip_disable "MSIE [1-6]\.";  
  19. # 使用gzip_static  
  20. gzip_static on; 

這里簡單說明一下吧, + gzip_static是會自動查找對應文件的.gz文件,這個的與gzip開啟與否以及gzip_types等并沒有關聯,你可以理解為優先返會.gz文件。

+ gzip的開啟是針對于請求文件的實時壓縮,這個是會消耗cpu的,比如說上面的請求文件的Content-Length大于gzip_min_length,就進行壓縮返回。

總結一下就是你如果打包后有.gz文件,只需要開啟gzip_static即可,如果沒有那么得啟用gzip實時壓縮,不過我建議使用前者,另外gzip的適用于文本類型,圖片之類的使用的話會適得其反,故gzip_types請適當設置。

想看gzip是否成功啟用可以通過,查看返回的header頭Content-Encoding: gzip,以及查看文件的size,這里可以看到我們原來文件的是124kb,而返回的gzip文件為44kb,壓縮效率還是蠻大的:

緩存控制-沒有請求就是最好的請求

瀏覽器于服務器的緩存交互,細說起來可就多了,想了解完整的請看其他人整理的文章吧,我只是這里從配置上略說一下: 

  1. location /mobile {  
  2.   alias   /usr/share/nginx/html/mobile/;  
  3.   try_files uriuri/ /mobile/index.html;  
  4.   if (request_filename ~ .*\.(htm|html)){  
  5.       add_header Cache-Control no-cache;  
  6.   }  
  7.   if (request_uri ~* /.*\.(js|css)) {  
  8.       # add_header Cache-Control max-age=2592000 
  9.       expires 30d;  
  10.   }  
  11.   index  index.html;  

協商緩存

Last-Modified

我們的單頁入口文件是index.html,這個文件呢決定了我們要加載的js以及css,故我們給html文件設置協商緩存Cache-Control no-cache,當我們首次加載時http的狀態碼為200,服務器會返回一個Last-Modified表示這個文件的最后修改時間,

再次刷新時瀏覽器會把這個修改時間通過If-Modified-Since發送給服務器,如果沒有變動(Etag也會校驗),那么服務器會返回304狀態碼,說我的文件沒有變,你直接用緩存吧。

Etag

HTTP協議解釋Etag是被請求變量的實體標記,你可以理解為一個id,當文件變化了,這個id也會變化,這個和Last-Modified差不多,服務器會返回一個Etag,瀏覽器下次請求時會帶上If-None-Match,進行對比返回,有些服務器的Etag計算不同,故在做分布式的時候可能會出問題,文件沒改動不走緩存,當然你可以關閉這個只使用Last-Modified。

強緩存

我們的單頁應用打包時webpack等工具是會根據文件的變化生成對應的js的,也就也是文件不變的話js的hash值不變,故我們在加載js等文件時可以使用強緩存,讓瀏覽器在緩存時間類不進行請求,直接從緩存里面取值,

比如上面我們通過設置expires(Cache-Control也行,這個優先級更高)為30天,那么瀏覽器下此訪問我們相同的緩存過的js和css時(緩存時間內),就直接從緩存里面拿(200 from cache),而不會請求我們的服務器。

注意:此方法是基于上述打包生成hash而言的,假如你生成的是1.js,2.js之類的,那么你修改了1.js里面的類容,打包出來的還是1.js,那么瀏覽器還是會從緩存里面拿,不會進行請求的。也就是說使用此方式需要確保你修改了文件打包后修改的hash值需要變動。

強制刷新

強緩存用得好的話是飛一般的感覺,但是如果在錯誤情況下使用就老是走瀏覽器緩存,如何清理這個呢,我們常用的方式是Ctrl+F5或者在瀏覽器控制臺上把Disable cache給勾上,實際上這個是在請求文件時會自動加上一個header頭Cache-Control: no-cache,也就是說我不要緩存,那么瀏覽器會老老實實的向服務器發出請求。

長連接-減少握手次數

TCP握手以及TLS握手還是比較費時的,比如以前的http1.1之前的連接就是每一條都要進過TCP三次握手,超級費時,還好1.1默認使用了長連接,可以減少握手開銷,但是假如你做大文件上傳時會發現超過一定時間會斷掉,這是由于Nginx默認的長連接時間為75s,超過了就會斷開,

當你的網頁確實要加載很多很多東西時可以適當把這個時間延長一點,以減少握手次數(keepalive_requests可以限制keep alive最大請求數),至于大文件上傳嗎你可以選擇分片上傳,這里就不做介紹了。

server: 

  1. keepalive_timeout 75;  
  2. keepalive_requests 100; 

 

HTTP/2-更安全的 HTTP、更快的 HTTPS

現在很多網站都啟用了HTTP/2,HTTP/2最大的一個優點是完全保持了與HTTP/1的兼容,HTTP/2 協議本身并不要求一定開啟SSL,但瀏覽器要求一定要啟用SSL才能使用HTTP/2,頭部壓縮、虛擬的“流”傳輸、多路復用等技術可以充分利用帶寬,降低延遲,從而大幅度提高上網體驗。Nginx開啟相當簡單: 

  1. server {  
  2.   listen       443 ssl http2;  
  3.   ssl_certificate         /etc/nginx/conf.d/ssl/xxx.com.pem;  
  4.   ssl_certificate_key     /etc/nginx/conf.d/ssl/xxx.com.key;  
  5.   ssl_ciphers   ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE+AES128:!MD5:!SHA1; # 棄用不安全的加密套件 
  6.   ssl_prefer_server_ciphers   on; # 緩解 BEAST 攻擊  

HSTS-減少302重定向

現在大多數網站都是https的了,但是有個問題就是用戶在輸入網址時一般來說不會主動輸入https,走的還是80端口,我們一般會在80端口進行rewrite重寫: 

  1. server{  
  2.   listen    80;  
  3.   server_name   test.com;  
  4.   rewrite ^(.*)https://host$1 permanent;  

但這種重定向增加了網絡成本,多出了一次請求,我想下次訪問時直接訪問https怎么處理?我們可以使用HSTS,80端口的不變,在443端口的server新增: 

  1. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains;"; 

這相當于告訴瀏覽器:我這個網站必須嚴格使用HTTPS協議,在在max-age時間內都不允許用HTTP,下次訪問你就直接用HTTPS吧,那么瀏覽器只會在第一次訪問時走80端口重定向,之后訪問就直接是HTTPS的了(includeSubDomains指定的話那么說明此規則也適用于該網站的所有子域名)。

Session Ticket-https會話復用

我們知道https通信時,SSL握手會消耗大量時間,使用非對稱加密保護會話密鑰的生成。而真正傳輸的是通過對稱加密進行通信傳輸。那么我們每次刷新都進行SSL握手太費時間了,既然雙方都拿到會話密鑰了,那么用這個密鑰進行通信不就可以了,這就是會話復用。

服務器把密鑰加密后生成session ticket發送給客戶端,請求關閉后,如果客戶端發起后續連接(超時時間內),下次客戶端再和服務器建立SSL連接的時候,將此session ticket發送給服務器,服務器解開session ticket后拿出會話密鑰進行加密通信。 

  1. ssl_protocols               TLSv1.2 TLSv1.3; # 開啟TLS1.2 以上的協議  
  2. ssl_session_timeout         5m; # 過期時間,分鐘  
  3. ssl_session_tickets         on; # 開啟瀏覽器的Session Ticket緩存  

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2017-10-29 06:50:30

前端開發CSSWeb

2017-06-05 13:56:34

前端開發JavaScriptthis

2019-07-29 10:39:39

前端性能優化緩存

2009-09-22 18:26:48

2021-06-07 11:33:24

服務器優化TIME-WAIT

2010-08-12 14:13:01

Flex開發者

2014-12-15 10:25:21

移動開發像素設計

2019-07-03 10:29:59

JavaScript算法程序員

2020-02-25 17:13:15

移動開發iOSAndroid

2025-12-23 08:11:16

2023-06-06 15:31:13

JavaScript開發

2010-07-27 11:29:43

Flex

2016-11-23 13:50:29

三級列表頁持續架構前端優化

2014-02-10 10:13:43

2017-04-17 21:33:01

前端開發javascript嚴格模式

2019-03-12 10:38:18

前端開發Nginx

2018-08-26 22:39:08

單頁應用HATEOAS

2014-03-28 16:03:03

移動開發跨平臺工具

2022-12-01 10:05:19

2021-08-03 17:20:00

MySQL數據庫日志
點贊
收藏

51CTO技術棧公眾號

久草电影在线| 日本成人一区| 国产精品视频| 久久国产精品影视| 顶级网黄在线播放| 婷婷久久综合九色综合伊人色| 日韩小视频网站| 日本在线不卡视频一二三区| 国产精品亚洲综合| 欧美xxav| 欧美在线免费看| 菠萝蜜视频在线观看www入口| 日本丰满少妇一区二区三区| 佐山爱痴汉视频一区二区三区| 亚洲色欲色欲www| 熟妇人妻无乱码中文字幕真矢织江| 国产99久久久国产精品| 天天做天天爱天天高潮| 精品午夜一区二区三区在线观看| 欧美极品视频一区二区三区| 国产精品一卡| 久久涩涩网站| 久久香蕉精品| 中文字幕一区二区三区在线乱码 | 99re99热| 国产黄色精品视频| 国产精品入口芒果| 91免费精品国自产拍在线不卡| ww国产内射精品后入国产| 26uuu欧美| 成人免费淫片95视频观看网站| 日本一区二区三区在线不卡| 黄网视频在线观看| 香蕉成人伊视频在线观看| 天堂影院在线| 91精品一区二区三区在线观看| av网站大全在线| 亚洲毛片在线观看.| 91亚洲精品在看在线观看高清| 欧美韩国理论所午夜片917电影| 精品久久ai| 亚洲aⅴ男人的天堂在线观看| 国产精品mv在线观看| 亚洲 国产 日韩 综合一区| 成人一区二区视频| 91大神网址| 欧洲视频一区二区| 国产社区精品视频| 久久精品国产96久久久香蕉| 日本一道高清一区二区三区| 亚洲专区国产精品| 久久国产精品第一页| 国产一区二区三区精彩视频| 最新欧美人z0oozo0| 午夜神马福利影院| 亚洲一区在线观看免费 | 美女xx视频| 国产一区二区不卡老阿姨| 日韩精品视频在线观看视频| 97久久精品人人爽人人爽蜜臀| 成人动漫h在线观看| 欧洲色大大久久| 深夜成人福利| 国产精品91久久久| 丝袜脚交一区二区| 黄色免费视频大全| 色综合久久精品| 成人午夜精品| 国产精品爽黄69天堂a| 日本成人在线视频网站| 欧美日韩亚洲一二三| 91福利在线导航| 欧美日韩伦理一区二区| 国产成人精品视| 久久国产乱子精品免费女| 成人看片app| 欧美sm极限捆绑bd| 精品理论电影在线| 亚洲精品天堂成人片av在线播放 | 一区二区三区av在线| 国产精品久久久久影视| 免费黄色在线网站| 午夜免费日韩视频| 久久精品国产99国产| 亚色视频在线播放| 一本色道久久综合亚洲精品小说| 日韩av自拍| 国产精品动漫网站| 日韩一卡二卡三卡四卡| 在线成人动漫av| 欧美日韩dvd| 欧美人与禽zozo性伦| 秋霞蜜臀av久久电影网免费| 制服诱惑一区| 欧美综合在线视频| 蜜桃一区二区| 无码人妻h动漫| 亚洲成人激情在线| 66视频精品| 濑亚美莉vs黑人在线观看| 亚洲免费小视频| 国产精品亚洲综合色区韩国| 性史性dvd影片农村毛片| 欧美成人黄色小视频| 美国毛片一区二区三区| 国产一二三区在线视频| 国产91精品黑色丝袜高跟鞋| 国产一二精品视频| av网站导航在线观看免费| 成人黄色av网站| 亚洲视频免费在线观看| 国产成人视屏| 男人添女人下部高潮视频在观看| 日韩欧美在线影院| 中出一区二区| 在线观看av中文| 日韩美女主播视频| 国产精品久久久久久久久免费樱桃 | 一本色道久久综合狠狠躁篇的优点 | 国产成人av影视| 欧美视频网站| 久久视频这里有精品| 国语自产精品视频在线看一大j8 | 91精品国产91| 在线观看av一区二区| 日本一区二区免费在线观看视频| 国产黑丝在线一区二区三区| 国产欧美日韩一区二区三区在线观看| 国产精品激情偷乱一区二区∴| 日韩精品乱码免费| 性欧美video另类hd尤物| 性xxxfreexxxx性欧美| 校园春色影音先锋| 99热一区二区| 久久五月天综合| 黄色成人在线播放| 亚洲视频一区在线| 伊人婷婷欧美激情| 91丨porny丨国产入口| 国产久卡久卡久卡久卡视频精品| 激情成人综合网| 播放一区二区| 福利精品一区| 999久久久国产999久久久| 一区二区三区高清在线观看| 精品一区二区三区在线| 久久国产成人午夜av影院宅| 欧美一区视频| 琪琪久久久久日韩精品| 福利视频在线看| 免费网站www在线观看| 在线播放国产区| 色网站免费在线观看| 你懂的视频在线观看| www.4438全国最大| **孕交吃奶水一级毛片| 国产黄色在线观看| www.国产精品.com| 最后生还者第二季在线观看| 91在线高清| 久久亚洲人体| 久久夜色电影| 青草在线视频| 国产精品视频一区二区三区四蜜臂| 欧美日韩a区| jvid福利写真一区二区三区| 欧美日韩国产一区二区三区| 欧美理论片在线观看| 久久久噜久噜久久综合| 日韩电影在线观看永久视频免费网站| 日韩视频在线永久播放| 欧洲生活片亚洲生活在线观看| 久久av.com| 国产精品女主播视频| 色狠狠久久aa北条麻妃| 久久亚洲一区二区三区四区五区高 | 午夜精品久久久久久久久| 色哟哟一区二区三区| 中文字幕欧美日韩精品| 国产精品稀缺呦系列在线| 国产av国片精品| 超碰在线国产| 成人免费网址在线| 在线h片观看| 亚洲综合在线电影| 国产91在线播放精品| 美女网站色免费| 国产91一区二区三区| 亚洲性猛交xxxxwww| 亚洲永久精品国产| 亚洲人成免费| 78精品国产综合久久香蕉| 日韩二区三区| 日本少妇高潮喷水视频| 99视频在线播放| 欧美大片在线看免费观看| 在线电影院国产精品| 一色桃子久久精品亚洲| 视频一区二区不卡| 九色成人国产蝌蚪91|