中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Node的內置模塊zlib進行gzip壓縮

發布時間:2022-09-27 09:38:24 來源:億速云 閱讀:121 作者:iii 欄目:web開發

這篇文章主要介紹了如何使用Node的內置模塊zlib進行gzip壓縮的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何使用Node的內置模塊zlib進行gzip壓縮文章都會有所收獲,下面我們一起來看看吧。

什么是gzip?

HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術

這一般是指服務器中安裝的一個功能,當有人來訪問這個服務器中的網站時,服務器中的這個功能就將網頁內容壓縮后傳輸到來訪的電腦瀏覽器中顯示出來,一般對純文本內容可壓縮到原大小的40%

這樣傳輸就快了,效果就是你點擊網址后數據會很快的顯示出來,提高用戶體驗,當然這也會增加服務器的負載.,一般服務器中都安裝有這個功能模塊

減少文件大小有兩個明顯的好處:

  • 一是可以減少存儲空間

  • 二是通過網絡傳輸文件時,可以減少傳輸的時間

我們在進行本地數據傳遞時,如果一個文件太大我們經常會使用到文件壓縮技術(zip或rar等),將大文件壓縮成小文件進行傳遞,接收者再進行解壓即可,因為壓縮的速度一般是比較快的,這樣就能減少文件傳輸過程中的時間,從而提高效率

簡單來說,gzip其實就是一種用于服務端(后端)和客戶端(前端)之間壓縮數據的一種方法

gzip和zlib什么關系?

zlibDEFLATE算法的實現庫,它的API同時支持gzip文件格式以及一個簡化的數據流格式

DEFLATE是同時使用了LZ77算法哈夫曼編碼(Huffman Coding)的一個無損數據壓縮算法

gzipHTTP壓縮,一種在萬維網中加速傳輸HTML和其他內容的技術

所以可以說zlib是在gzip的基礎上增加了一些內容,這也是為什么nodegzip方法是在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搭建服務器或者內置模塊fsstream流不太了解的話,可以看我先前的文章:Node.js | 搭建后端服務器(含內置模塊 http | url | querystring 的使用)Node.js | 操作本地文件 — 玩轉 fs 內置模塊

運行server.js文件,使用瀏覽器訪問node服務器:

如何使用Node的內置模塊zlib進行gzip壓縮

可以看到我這里傳遞的數據大小是97.6kb(這取決于你的index.html的內容)

gzip壓縮數據傳輸

我們使用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服務器:

如何使用Node的內置模塊zlib進行gzip壓縮

可以看到使用gzip壓縮后我這里傳遞的數據大小只有27.5kb(這取決于你的index.html的內容),這與之前的97.6kb相比,數據傳輸速率大幅提升,這就是我們使用gzip的意義!

關于“如何使用Node的內置模塊zlib進行gzip壓縮”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何使用Node的內置模塊zlib進行gzip壓縮”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永定县| 翼城县| 鄄城县| 浠水县| 化隆| 农安县| 丁青县| 喀什市| 宣化县| 盱眙县| 西乌珠穆沁旗| 苍梧县| 杭州市| 肥乡县| 通州区| 广南县| 南陵县| 陕西省| 浮梁县| 德阳市| 太仆寺旗| 屏东县| 湘乡市| 临沭县| 建水县| 贵德县| 呼伦贝尔市| 竹溪县| 旺苍县| 龙州县| 江川县| 中江县| 景德镇市| 蓝山县| 衡阳县| 化州市| 寻乌县| 闸北区| 靖州| 岗巴县| 全州县|