返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Node.js 使用 zlib 内置模块进行 gzip 压缩
  • 270
分享到

Node.js 使用 zlib 内置模块进行 gzip 压缩

2024-04-02 19:04:59 270人浏览 薄情痞子
摘要

目录前言什么是gzip?gzip和zlib什么关系?普通数据传输gzip压缩数据传输结语前言 任何服务端开发都少不了性能优化的操作,在前后端使用Http接口(api)进行数据传递时,

前言

任何服务端开发都少不了性能优化的操作,在前后端使用Http接口(api)进行数据传递时,如果传递数据量太大,势必会造成请求超时或失败。

nodejs为我们提供了一个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服务器:

可以看到我这里传递的数据大小是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服务器:

可以看到使用gzip压缩后我这里传递的数据大小只有27.5kb(这取决于你的index.html的内容),这与之前的97.6kb相比,数据传输速率大幅提升,这就是我们使用gzip的意义!

结语

这篇文章讲了node的一个非常实用的小模块zlibzlib大家可能之前没听过,但gzip应该都曾听过,gzip是请求数据传输性能优化的一种很好的方式,看完本篇文章,相信你会对gzip有了更深的理解

到此这篇关于Node.js 使用 zlib 内置模块进行 gzip 压缩的文章就介绍到这了,更多相关Node.js gzip 压缩内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Node.js 使用 zlib 内置模块进行 gzip 压缩

本文链接: https://lsjlt.com/news/167184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node.js 使用 zlib 内置模块进行 gzip 压缩
    目录前言什么是gzip?gzip和zlib什么关系?普通数据传输gzip压缩数据传输结语前言 任何服务端开发都少不了性能优化的操作,在前后端使用HTTP接口(API)进行数据传递时,...
    99+
    2024-04-02
  • Node.js | 使用 zlib 内置模块进行 gzip 压缩
    🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路:前端之行,任重道远(来自大三学长的万字自述) 🧧 加入社区领红包:海底烧烤店ai(从前端到全栈) 🧑‍💼个人简介:即将大三的学生,一个不甘平庸的平凡人🍬 👉 你的...
    99+
    2023-08-20
    node.js 服务器 前端 gzip 性能优化
  • 如何使用Node的内置模块zlib进行gzip压缩
    这篇文章主要介绍了如何使用Node的内置模块zlib进行gzip压缩的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Node的内置模块zlib进行gzip压缩文章都会有所...
    99+
    2024-04-02
  • python压缩和解压缩模块之zlib的用法
    目录python压缩和解压缩模块之zlibpython中zlib库用法zlib主要用于压缩与解压缩python压缩和解压缩模块之zlib 由于早期的zlib和Python之间不兼容,...
    99+
    2024-04-02
  • python用模块zlib压缩与解压字符串和文件的方法
    python中zlib模块是用来压缩或者解压缩数据,以便保存和传输。它是其他压缩工具的基础。下面来一起看看python用模块zlib压缩与解压字符串和文件的方法。话不多说,直接来看示例代码。 例子1:压缩与...
    99+
    2022-06-04
    字符串 模块 文件
  • Python使用zlib对数据进行简单压
    在Python丰富的库中,也有着对数据进行压缩处理的库(zlib)。对于需要数据压缩的应用程序,此模块中的功能允许使用zlib库进行压缩和解压缩。 (本文只对简单的字符串数据进行压缩,如需压缩文件等复杂数据类型,详见zlib官网...
    99+
    2023-01-31
    简单 数据 Python
  • Python中zipfile压缩包模块的使用
    简介 ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具 此模块目前不能处理分卷 ZIP 文件,支持解密 ZIP 归档中的加密文件,但是目前不能创建...
    99+
    2022-06-02
    Python zipfile
  • 怎么使用Nginx作反向代理配置GZip压缩
    这篇文章主要介绍了怎么使用Nginx作反向代理配置GZip压缩的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Nginx作反向代理配置GZip压缩文章都会有所收获,下面我们一起来看看吧。前提条件: nod...
    99+
    2023-07-04
  • Node.js 中常用内置模块(path 路径模块)
    目录前言路径拼接:join方法获取文件名:basename方法获取文件扩展名:extname方法结语前言 进行服务端开发,少不了对各种路径的处理,之前我们是简单粗暴的使用字符串的方法...
    99+
    2024-04-02
  • Node.js中的内置模块怎么用
    这篇“Node.js中的内置模块怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js中的内置模块怎么用”文章吧...
    99+
    2023-06-17
  • 使用Java怎么对字符串进行压缩与解压缩
    本篇文章给大家分享的是有关使用Java怎么对字符串进行压缩与解压缩,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2....
    99+
    2023-06-06
  • Linux如何使用命令进行压缩与解压缩操作
    这篇文章将为大家详细讲解有关Linux如何使用命令进行压缩与解压缩操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在学习压缩和解压缩之前。首先,要了解一下打包、压缩、解压缩的基本概念。打包文件:一看到 ...
    99+
    2023-06-09
  • Node.js内置模块的运行机制是什么
    今天小编给大家分享一下Node.js内置模块的运行机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。内置模块一些栗子F...
    99+
    2023-07-04
  • 如何在Python中使用zipfile压缩包模块
    这期内容当中小编将会给大家带来有关如何在Python中使用zipfile压缩包模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。简介ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创...
    99+
    2023-06-15
  • 关于Python中zipfile压缩包模块的使用
    目录简介解压文件是否ZIP文件读取元数据从其他数据源压缩文件写入ZipInfo追加文件创建包含Python库的ZIP简介 ZIP 文件格式是一个常用的归档与压缩标准,zipfile&...
    99+
    2023-05-15
    Python zipfile Python 压缩包模块 zipfile压缩包模块
  • Python中的zipfile压缩包模块如何使用
    这篇文章主要介绍“Python中的zipfile压缩包模块如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中的zipfile压缩包模块如何使用”文章能帮助大家解决问题。简介ZIP ...
    99+
    2023-07-06
  • 如何使用Node进行图片压缩
    这篇文章主要介绍“如何使用Node进行图片压缩”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Node进行图片压缩”文章能帮助大家解决问题。我们先把图片上传到后端,看看后端接收了什么样的参数。...
    99+
    2023-07-05
  • 如何在node.js中使用​JsonWebToken模块进行token加密
    目录一、token1、什么是token2、作用二、Express中实现token的方法:1、使用JWT模块:JsonWebToken2、token验证的流程3、Express中实现过...
    99+
    2023-03-19
    nodejs token node token验证 node.js token加密
  • 怎么在node.js中使用​JsonWebToken模块进行token加密
    这篇文章主要讲解了“怎么在node.js中使用JsonWebToken模块进行token加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在node.js中使用JsonWebToken模...
    99+
    2023-07-05
  • 使用canvas怎么对图片进行压缩
    本篇文章为大家展示了使用canvas怎么对图片进行压缩,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前提的函数将file文件转化为base64function changeFileToBa...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作