您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用Node的內置模塊zlib進行gzip壓縮的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何使用Node的內置模塊zlib進行gzip壓縮文章都會有所收獲,下面我們一起來看看吧。
HTTP
協議上的GZIP
編碼是一種用來改進WEB應用程序性能的技術
這一般是指服務器中安裝的一個功能,當有人來訪問這個服務器中的網站時,服務器中的這個功能就將網頁內容壓縮后傳輸到來訪的電腦瀏覽器中顯示出來,一般對純文本內容可壓縮到原大小的40%
這樣傳輸就快了,效果就是你點擊網址后數據會很快的顯示出來,提高用戶體驗,當然這也會增加服務器的負載.,一般服務器中都安裝有這個功能模塊
減少文件大小有兩個明顯的好處:
一是可以減少存儲空間
二是通過網絡傳輸文件時,可以減少傳輸的時間
我們在進行本地數據傳遞時,如果一個文件太大我們經常會使用到文件壓縮技術(zip或rar等),將大文件壓縮成小文件進行傳遞,接收者再進行解壓即可,因為壓縮的速度一般是比較快的,這樣就能減少文件傳輸過程中的時間,從而提高效率
簡單來說,gzip
其實就是一種用于服務端(后端)和客戶端(前端)之間壓縮數據的一種方法
zlib
是DEFLATE
算法的實現庫,它的API同時支持gzip
文件格式以及一個簡化的數據流格式
DEFLATE
是同時使用了LZ77算法
與哈夫曼編碼(Huffman Coding)
的一個無損數據壓縮算法
gzip
在HTTP
壓縮,一種在萬維網中加速傳輸HTML
和其他內容的技術
所以可以說zlib
是在gzip
的基礎上增加了一些內容,這也是為什么node
中gzip
方法是在zlib
內置模塊中的原因
我們使用node
搭建一個服務器,來演示我們傳遞數據的普通方式:
server.js
const http = require("http"); const fs = require("fs"); http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", }); const readStream = fs.createReadStream("./index.html"); // res本質就是一個可寫流 readStream.pipe(res); }).listen(3000, () => { console.log("服務器啟動啦!"); });
這是一個簡單的node
服務器,瀏覽器訪問它后,它會向我們返回一個index.html
,這個index.html
里的內容大家隨便寫,寫的越多越好
這里也使用到了上一節我們講過的內置模塊fs
中的stream
流,需要注意的是,在node
服務器中的res
參數本質是一個可寫流,所以我們才能直接將res
用于pipe
管道中
如果你對
node
搭建服務器或者內置模塊fs
的stream
流不太了解的話,可以看我先前的文章:Node.js | 搭建后端服務器(含內置模塊 http | url | querystring 的使用)Node.js | 操作本地文件 — 玩轉 fs 內置模塊
運行server.js
文件,使用瀏覽器訪問node
服務器:
可以看到我這里傳遞的數據大小是97.6kb(這取決于你的index.html
的內容)
我們使用gzip
來改造一下上面普通數據傳輸的例子:
server.js
const http = require("http"); const fs = require("fs"); // 導入內置模塊zlib const zlib = require("zlib"); // 獲取gzip方法 const gzip = zlib.createGzip(); http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", "Content-Encoding": "gzip", // 告訴瀏覽器我們是通過gzip壓縮的 }); const readStream = fs.createReadStream("./index.html"); // res本質就是一個可寫流 // 在數據返回之前使用gzip壓縮數據 readStream.pipe(gzip).pipe(res); }).listen(3000, () => { console.log("服務器啟動啦!"); });
先引入zlib
內置模塊,再使用zlib.createGzip()
獲取gzip
方法,這個gzip
方法實際也是一種數據流的格式,與node
服務器中的res
參數一樣,這也是pipe
管道中能直接使用gzip
的原因
我們在將數據傳遞給res
參數(客戶端)之前,通過pipe
管道的鏈式調用,將gzip
加上
這樣readStream
(服務端)的數據會先經過gzip
壓縮,之后才會傳遞給res
參數(客戶端)
?? 需要注意的是:
http
數據壓縮的方式不止有gzip
,還有其它的壓縮方式,只不過gzip
是最常見最常用的一種方式
所以我們服務端使用gzip
將數據壓縮后傳遞給瀏覽器時,瀏覽器并不知道我們是使用哪種方式壓縮的數據,于是就不知道該以哪種方式進行解壓,所以我們需要手動明確的告訴瀏覽器我們使用的是gzip
,服務端加上以下響應頭即可:
"Content-Encoding": "gzip", // 告訴瀏覽器我們是通過gzip壓縮的
這樣瀏覽器就能夠正確解壓我們傳遞的數據了,運行上面的server.js
,打開瀏覽器訪問我們的node
服務器:
可以看到使用gzip
壓縮后我這里傳遞的數據大小只有27.5kb(這取決于你的index.html
的內容),這與之前的97.6kb相比,數據傳輸速率大幅提升,這就是我們使用gzip
的意義!
關于“如何使用Node的內置模塊zlib進行gzip壓縮”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何使用Node的內置模塊zlib進行gzip壓縮”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。