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

探索HTTP傳輸中g(shù)zip壓縮的秘密

開發(fā) 前端
我們給某人發(fā)送郵件時(shí),我們?cè)趥鬏斨鞍炎约旱奈募嚎s一下,接收方收到文件后再去解壓獲取文件。這中操作對(duì)于我們來說都已經(jīng)司空見慣。我們壓縮文件的目的就是為了把傳輸文件的體積減小,加快傳輸速度。我們?cè)?http 傳輸中開啟 gZip 的目的也是如此。

為什么要開啟gZip 

[[216954]]

我們給某人發(fā)送郵件時(shí),我們?cè)趥鬏斨鞍炎约旱奈募嚎s一下,接收方收到文件后再去解壓獲取文件。這中操作對(duì)于我們來說都已經(jīng)司空見慣。我們壓縮文件的目的就是為了把傳輸文件的體積減小,加快傳輸速度。我們?cè)?http 傳輸中開啟 gZip 的目的也是如此,但是一般文章介紹 gZip 時(shí)候總是結(jié)合一些服務(wù)端配置(nginx)或者構(gòu)建工具插件(webpack)來說,列出一大堆配置讓人看的云里霧里,以至于到最后還沒搞懂 為什么用怎么用 這些問題。

http 與 gZip

我們下面去探討一下這些問題

gZip 文件怎么通訊

我們傳輸壓縮文件給別人時(shí)候一般都帶著后綴名 .rar, .zip之類,對(duì)方在拿到文件后根據(jù)相應(yīng)的后綴名選擇不同的解壓方式然后去解壓文件。我們?cè)?http 傳輸時(shí)候解壓文件的這個(gè)角色的扮演者就是我們使用的瀏覽器,但是瀏覽器怎么分辨這個(gè)文件是什么格式,應(yīng)該用什么格式去解壓呢?

http/1.0 協(xié)議中關(guān)于服務(wù)端發(fā)送的數(shù)據(jù)可以配置一個(gè) Content-Encoding 字段,這個(gè)字段用于說明數(shù)據(jù)的壓縮方法 

  1. Content-Encoding: gzip 
  2. Content-Encoding: compress 
  3. Content-Encoding: deflate 

客戶端在接受到返回的數(shù)據(jù)后去檢查對(duì)應(yīng)字段的信息,然后根據(jù)對(duì)應(yīng)的格式去做相應(yīng)的解碼。客戶端在請(qǐng)求時(shí),可以用 Accept-Encoding 字段說明自己接受哪些壓縮方法。 

  1. Accept-Encoding: gzip, deflate 

我們?cè)跒g覽器的控制臺(tái)中可以看到請(qǐng)求的相關(guān)信息 

兼容性

提到瀏覽器作為一個(gè)前端就不由自主的會(huì)想一個(gè)問題,會(huì)不會(huì)有瀏覽器不支持呢。HTTP/1.0 是1996年5月發(fā)布的。好消息是基本不用考慮兼容性的問題,幾乎所有瀏覽器都支持它。值得一提的是 ie6的早起版本中存在一個(gè)會(huì)破壞 gZip的錯(cuò)誤,后面 ie6本身在 WinXP SP2 中修復(fù)了這個(gè)問題,而且用這個(gè)版本的用戶數(shù)量也很少。

誰去壓縮文件

這件事看起來貌似只能服務(wù)端來做,我們?cè)诰W(wǎng)上看到最多的也是諸如 nginx 開啟 gZip 配置之類的文章,但是現(xiàn)在前端流行 spa 應(yīng)用, 用 react, vue 之類的框架時(shí)候總伴隨這一套自己的腳手架,一般用 webpack 作為打包工具,其中可以配置插件 如compression-webpack-plugin 可以讓我們把生成文件進(jìn)行 gZip 等壓縮并生成對(duì)應(yīng)的壓縮文件,而我們應(yīng)用在構(gòu)架時(shí)候有可能也會(huì)在服務(wù)區(qū)和前端文件中放置一層 node 應(yīng)用來進(jìn)行接口鑒權(quán)和文件轉(zhuǎn)發(fā)。nodejs中我們熟悉的express 框架中也有一個(gè)compression 中間件,可以開啟gZip,一時(shí)間看的人眼花繚亂,到底應(yīng)該用誰怎么用呢?

服務(wù)端響應(yīng)請(qǐng)求時(shí)候壓縮

其實(shí) nginx 壓縮和 node 框架中用中間件去壓縮都是一樣的,當(dāng)我們點(diǎn)擊網(wǎng)頁發(fā)送一個(gè)請(qǐng)求時(shí)候,我們的服務(wù)端會(huì)找到對(duì)應(yīng)的文件,然后對(duì)文件進(jìn)行壓縮返回壓縮后的內(nèi)容【當(dāng)然可以利用緩存減少壓縮次數(shù)】,并配置好我們上面提到的 Content-Encoding 信息。對(duì)于一些應(yīng)用在構(gòu)架時(shí)候并沒有上游代理層,比如服務(wù)端就一層 node 就可以直接用自己本身的壓縮插件對(duì)文件進(jìn)行壓縮,如果上游配有有 nginx 轉(zhuǎn)發(fā)處理層,最好交給 nginx 來處理這些,因?yàn)樗鼈冇袑iT為此構(gòu)建的內(nèi)容,可以更好的利用緩存并減小開銷(很多使用c語言編寫的)。

我們看一些 nginx 中開啟 gZip 壓縮的一部分配置

  1. # 開啟gzip 
  2. gzip on
  3. # 啟用gzip壓縮的最小文件,小于設(shè)置值的文件將不會(huì)壓縮 
  4. gzip_min_length 1k; 
  5. # gzip 壓縮級(jí)別,1-10,數(shù)字越大壓縮的越好,也越占用CPU時(shí)間,后面會(huì)有詳細(xì)說明 
  6. gzip_comp_level 2; 
  7. # 進(jìn)行壓縮的文件類型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。 
  8. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; 
應(yīng)用構(gòu)建時(shí)候壓縮

既然服務(wù)端都可以做了為什么 webpack 在打包前端應(yīng)用時(shí)候還有這樣一個(gè)壓縮插件呢,我們可以在上面 nginx 配置中看到 gzip_comp_level 2 這個(gè)配置項(xiàng),上面也有注釋寫道 1-10 數(shù)字越大壓縮效果越好,但是會(huì)耗費(fèi)更多的CPU和時(shí)間,我們壓縮文件除了減少文件體積大小外,也是為了減少傳輸時(shí)間,如果我們把壓縮等級(jí)配置的很高,每次請(qǐng)求服務(wù)端都要壓縮很久才回返回信息回來,不僅服務(wù)器開銷會(huì)增大很多,請(qǐng)求方也會(huì)等的不耐煩。但是現(xiàn)在的 spa 應(yīng)用既然文件都是打包生成的,那如果我們?cè)诖虬鼤r(shí)候就直接生成高壓縮等級(jí)的文件,作為靜態(tài)資源放在服務(wù)器上,接收到請(qǐng)求后直接把壓縮的文件內(nèi)容返回回去會(huì)怎么樣呢?

webpackcompression-webpack-plugin 就是做這個(gè)事情的,配置起來也很簡(jiǎn)單只需要在裝置中加入對(duì)應(yīng)插件,簡(jiǎn)單配置如下

  1. const CompressionWebpackPlugin = require('compression-webpack-plugin'); 
  2.  
  3. webpackConfig.plugins.push( 
  4.     new CompressionWebpackPlugin({ 
  5.       asset: '[path].gz[query]'
  6.       algorithm: 'gzip'
  7.       test: new RegExp('\\.(js|css)$'), 
  8.       threshold: 10240, 
  9.       minRatio: 0.8 
  10.     }) 

webpack 打包完成后生成打包文件外還會(huì)額外生成 .gz 后綴的壓縮文件

 

那么這個(gè)插件的壓縮等級(jí)是多少呢,我們可以在源碼中看到默認(rèn)的 level9

  1. ... 
  2. const zlib = require('zlib'); 
  3. this.options.algorithm = zlib[this.options.algorithm]; 
  4. ... 
  5. this.options.compressionOptions = { 
  6.     level: options.level || 9, 
  7.     flush: options.flush 
  8.     ... 

可以看到壓縮使用的是 zlib 庫,而 zlib 分級(jí)來說,默認(rèn)是 6 ,最高的級(jí)別就是9 Best compression (also zlib.Z_BEST_COMPRESSION),因?yàn)槲覀冎挥性谏暇€項(xiàng)目時(shí)候才回去打包構(gòu)建一次,所以我們?cè)跇?gòu)建時(shí)候使用最高級(jí)的壓縮方式壓縮多耗費(fèi)一些時(shí)間對(duì)我們來說根本沒任何損耗,而我們?cè)诜?wù)器上也不用再去壓縮文件,只需要找到相應(yīng)已經(jīng)壓縮過的文件直接返回就可以了。

服務(wù)端怎么找到這些文件

在應(yīng)用層面解決這個(gè)問題還是比較簡(jiǎn)單的,比如上述壓縮文件會(huì)產(chǎn)生index.css, index.js的壓縮文件,在服務(wù)端簡(jiǎn)單處理可以判斷這兩個(gè)請(qǐng)求然后給予相對(duì)應(yīng)的壓縮文件。以 nodeexpress 為例

  1. ... 
  2. app.get(['/index.js','/index.css'], function (req, res, next) { 
  3.   req.url = req.url + '.gz' 
  4.   res.set('Content-Encoding''gzip'
  5.   res.setHeader("Content-Type", generateType(req.path)) // 這里要根據(jù)請(qǐng)求文件設(shè)置content-type 
  6.   next() 
  7. }) 

上面我們可以給請(qǐng)求返回 gZip 壓縮后的數(shù)據(jù)了,當(dāng)然上面的局限性太強(qiáng)也不可取,但是對(duì)于處理這個(gè)方面需求也已經(jīng)有很多庫存在,expressexpress-static-gzip 插件 koakoa-static 則默認(rèn)自帶對(duì) gZip 文件的檢測(cè),基本原理就是對(duì)請(qǐng)求先檢測(cè) .gz后綴的文件是否存在,再去根據(jù)結(jié)果返回不同的內(nèi)容。

哪些文件可以被 gZip 壓縮

gZip 可以壓縮所有的文件,但是這不代表我們要對(duì)所有文件進(jìn)行壓縮,我們寫的代碼(css,js)之類的文件會(huì)有很好的壓縮效果,但是圖片之類文件則不會(huì)被 gzip 壓縮太多,因?yàn)樗鼈円呀?jīng)內(nèi)置了一些壓縮,一些文件(比如一些已經(jīng)被壓縮的像.zip文件那種)再去壓縮可能會(huì)讓生成的文件體積更大一些。當(dāng)然已經(jīng)很小的文件也沒有去壓縮的必要了。

實(shí)踐

能開啟 gZip 肯定是要開啟的,具體使用在請(qǐng)求時(shí)候?qū)崟r(shí)壓縮還是在構(gòu)建時(shí)候去生成壓縮文件,就要看自己具體業(yè)務(wù)情況。

參考資料

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2010-05-19 16:50:43

IIS服務(wù)器

2018-01-30 10:34:24

爬蟲HTTP過程

2012-06-29 10:22:36

系統(tǒng)架構(gòu)

2009-01-03 16:29:45

AJAXASP.NET.NET

2009-01-03 11:07:06

AJAXASP.NET.NET

2024-03-22 08:11:20

.NETJSON數(shù)據(jù)序列化

2010-01-15 19:17:48

C++語言

2019-08-15 16:00:21

Linux內(nèi)核Kconfig

2011-07-27 16:26:42

iPhone 解壓 gzip

2010-02-04 10:47:29

Dalvik移植技術(shù)

2019-04-08 15:11:12

HTTP協(xié)議Web

2024-04-01 09:29:37

單頁面應(yīng)用首屏Gzip壓縮

2015-07-13 10:07:43

Java.NET

2024-04-28 00:00:00

TCPOSI模型

2021-06-07 00:03:31

HTTP大文件方案

2017-06-12 18:24:25

數(shù)據(jù)庫壓縮技術(shù)

2012-07-12 15:04:56

Windows 7操作系統(tǒng)

2014-11-13 10:57:03

http協(xié)議

2023-06-05 08:46:42

2009-10-21 12:49:25

Linux壓縮打包方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

360天大佬第二季在线观看| 亚洲欧洲日产国码av系列天堂| 欧美变态tickling挠脚心| 精品久久久久久久免费人妻| 成人一区二区在线观看| 欧美精品在线观看91| 中文字幕亚洲字幕| 成人欧美一区二区三区黑人免费| 亚洲aa在线观看| 蜜桃臀一区二区三区| 精品国产乱码久久| 日本三级一区| 午夜不卡av在线| av第一福利在线导航| 综合伊思人在钱三区| 亚洲成av人影院在线观看网| 欧美精品资源| 欧美大胆的人体xxxx| 国内揄拍国内精品久久| 欧美成年黄网站色视频| 丁香高清在线观看完整电影视频 | 91免费小视频| 中文乱码免费一区二区| 色综合999| 98精品国产自产在线观看| 北条麻妃在线| 亚洲国产一区二区精品专区| 波多野结衣在线| 欧美精品99| 久久精品一区蜜桃臀影院| 日韩精品欧美精品| 欧美一区二区三| 日本一区二区在线看| 亚洲三级电影在线观看| 91亚洲国产成人久久精品| 亚洲欧美日本国产| 成人系列视频| 男女性色大片免费观看一区二区| 福利一区在线观看| 亚洲一区二区三区在线| 亚洲午夜精品网| 精品国产一区二区亚洲人成毛片 | 色综合欧美在线视频区| 国内精品伊人| 欧美视频第一区| 亚洲手机在线| av午夜一区麻豆| 欧美人与性动交xxⅹxx| 91精品国产综合久久国产大片| 国产成人精品久久久| 国产人成精品一区二区三| 色婷婷**av毛片一区| 国产三级一区| 亚洲一区二区三区自拍| 精品999在线观看| 狠狠色一日本高清视频| 成人午夜亚洲| 大胆亚洲人体视频| 亚洲电影免费观看高清| 精品欧美日韩在线| 久草福利在线| 午夜日韩在线| 欧美色精品在线视频| 91精品国产99久久久久久红楼| 草久在线视频| 日韩中文在线电影| 亚洲成人综合在线| 国产精品人成电影在线观看| 国产成免费视频| 欧美色图在线播放| 欧美日韩色婷婷| 999热视频| 老司机午夜在线| 久久久久久夜| 亚洲国产精品国自产拍av秋霞| 欧美精品v日韩精品v国产精品| 在线三级中文| 美女国产一区二区三区| 亚洲欧美日韩直播| 国产午夜亚洲精品午夜鲁丝片 | 综合欧美一区二区三区| 国产99视频精品免视看7| 99视频在线观看地址| 麻豆91小视频| 国产精品美女免费看| 欧美电影网址| 亚洲成av人影院| 国产成人精品无码播放| 亚洲毛片av| 人人澡人人澡人人看欧美| 牛牛在线精品视频| 亚洲三级视频在线观看| 亚洲成人网上| 国产毛片久久久| 日韩欧美自拍偷拍| 国外av网站| 蜜臀av性久久久久蜜臀av麻豆 | 女人丝袜激情亚洲| 亚洲精品有码在线| 色呦呦网站在线观看| 欧美性色欧美a在线播放| 欧美性猛交xxx乱久交| 99国内精品| 欧美综合第一页| 英国三级经典在线观看| 91原创在线视频| 亚洲国产成人精品电影| 久久免费看av| 欧美野外wwwxxx| 精品在线播放免费| 在线观看日韩av| 成人午夜免费在线视频| 久久国际精品| 欧美日韩午夜激情| 亚洲国产一区二区三区在线| a级片免费在线观看| 国产乱码字幕精品高清av| 九九久久综合网站| 在线视频中文字幕久| 国产精品手机在线播放| 欧美熟乱第一页| 99电影在线观看| 538在线视频| 999国产精品| 亚洲色图欧美在线| 国产精品久久电影观看| porn视频在线观看| 成人av在线电影| 国产综合福利在线| 8x8ⅹ拨牐拨牐拨牐在线观看| 日本欧美在线观看| 久久久亚洲精品视频| 麻豆国产在线播放| 成人丝袜高跟foot| 国产chinese精品一区二区| 欧美性猛片xxxxx免费中国| 九九热爱视频精品视频| 九九热r在线视频精品| 欧美jizz18| 亚洲综合免费观看高清在线观看| 激情网站五月天| 国产精品久久久久久久久果冻传媒| 国产又大又黄又猛| 亚洲一区二区三区不卡国产欧美| 三级在线电影| 日韩欧美国产电影| 欧美黑人经典片免费观看| 亚洲免费播放| 日韩在线www| 国产女王在线**视频| 日韩欧美美女在线观看| 亚洲精品成人久久电影| 激情综合色综合啪啪开心| 亚洲人高潮女人毛茸茸| 亚洲综合网中心| 久久久久中文| 在线观看18视频网站| 亚洲一区二区三区四区在线 | 日本一区视频| 亚洲黄网站黄| 全部a∨一极品视觉盛宴| 亚洲视频777| 国产香蕉精品视频一区二区三区| 久久久久久久久久久成人| 三区在线视频| 国产精品你懂的在线欣赏| 日本免费在线视频观看| 在线成人激情| 51精品国产人成在线观看| 国产精品nxnn| 欧美丰满老妇厨房牲生活| 欧美影视资讯| 久久99国产精品自在自在app| 香港伦理在线| 天天av天天翘天天综合网 | 日韩中文字幕在线视频| 大片免费在线观看| 欧美亚洲国产一区二区三区| 日本福利专区在线观看| 精品成人在线视频| 中文在线а√天堂官网| 一区二区三区在线不卡| 四虎国产成人永久精品免费| 国产视频不卡一区| 啊啊啊好爽视频| 日韩码欧中文字| 中文字幕一二三区在线观看| 欧美视频一区二区三区…| 国产大学生校花援交在线播放| 日韩欧美第一页| 亚洲小说区图片| 中文字幕日韩欧美在线视频| www.国产精品| 久久免费视频网| 91综合在线| 欧美精品一区二区视频| 国产一区二区在线看| 成人在线观看a| 国产精品欧美久久久久无广告 | 欧美美乳视频|