如何使用Node的内置模块zlib进行gzip压缩(gzip,node,zlib,web开发)

时间:2024-05-05 17:02:37 作者 : 石家庄SEO 分类 : web开发
  • TAG :

");
});

这是一个简单的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

consthttp=require("http");
constfs=require("fs");
//导入内置模块zlib
constzlib=require("zlib");
//获取gzip方法
constgzip=zlib.createGzip();
http.createServer((req,res)=>{
res.writeHead(200,{
"Content-Type":"text/html;charset=utf-8",
"Content-Encoding":"gzip",//告诉浏览器我们是通过gzip压缩的
});

constreadStream=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压缩的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:HTML中如何引入JS文件下一篇:

22 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18