Node에서 gzip 압축을 수행하는 방법은 무엇입니까? 다음 글에서는 Node의 내장 모듈 zlib가 gzip 압축을 수행하는 방법을 소개합니다. 모든 사람에게 도움이 되기를 바랍니다.
성능 최적화 작업을 위해서는 서버 측 개발이 필수입니다. 프런트엔드와 백엔드에서 데이터 전송을 위해 HTTP 인터페이스(API)를 사용할 때 전송되는 데이터 양이 너무 많으면 필연적으로 시간 초과 또는 실패를 요청합니다.
nodejs
는 zlib
내장 모듈을 제공하며 gzip
메소드를 사용하여 전달된 데이터를 압축하여 데이터를 향상시킬 수 있습니다. 전송 효율성. [관련 튜토리얼 추천: nodejs
为我们提供了一个zlib
内置模块,我们可以使用它其中的gzip
方法来对传递的数据进行压缩,从而提高数据传递效率。【相关教程推荐:nodejs视频教程】
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
nodejs 동영상 튜토리얼
HTTP
프로토콜의 GZIP
인코딩은 웹 애플리케이션 성능을 향상🎜🎜 위해 사용되는 기술입니다. 이는 일반적으로 서버에 설치된 기능입니다. 누군가가 이 서버의 웹사이트를 방문하면 서버의 이 기능은 웹 콘텐츠를 압축한 다음 이를 방문하는 컴퓨터 브라우저로 전송하여 일반적으로 표시합니다. 텍스트 콘텐츠를 원래 크기의 40%로 압축할 수 있습니다🎜🎜이렇게 하면 전송이 빠르게 효과가 있어 URL을 클릭하면 데이터가 빠르게 표시되므로 사용자 경험이 향상됩니다. . 물론, 이는 서버의 로드를 증가시킵니다. 이 기능 모듈은 일반적으로 서버에 설치되며 파일 크기를 줄이는 데는 두 가지 분명한 이점이 있습니다. 🎜🎜로컬 데이터를 전송할 때 파일 너무 크면 파일 압축 기술(zip 또는 rar 등)을 자주 사용합니다. 대용량 파일을 작은 파일로 압축하여 전송하면 일반적으로 압축 속도가 상대적으로 빠르기 때문에 수신자는 압축을 풀 수 있습니다. , 파일 전송 처리 시간을 줄여 효율성을 높일 수 있습니다🎜🎜간단히 말하면
gzip
은 실제로 서버(백엔드)와 클라이언트(프론트엔드) 간에 데이터를 압축하는 데 사용되는 방법입니다. 방법 🎜zlib
는 DEFLATE
알고리즘의 구현 라이브러리이며 해당 API는 gzip파일 형식 및 단순화된 <strong>데이터 흐름</strong> 형식 🎜<blockquote>🎜<code>DEFLATE
는 LZ77 알고리즘
과 Huffman A를 모두 사용합니다. 허프만 코딩의 <strong>무손실 데이터 압축 알고리즘</strong>
🎜🎜gzip
을 HTTP
압축에서 전송 속도를 높이는 기술 HTML
및 World Wide Web의 기타 콘텐츠🎜🎜따라서 zlib
는 gzip
을 기반으로 일부 콘텐츠를 추가한다고 말할 수 있습니다. node
의 gzip
메소드가 zlib
🎜node
를 사용하여 데이터를 전송하는 일반적인 방법을 보여주기 위해 서버를 구축합니다. 🎜🎜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("服务器启动啦!"); });
node
서버에 액세스하면 index.html
이 반환됩니다. 원하는 대로 이 index.html
에 콘텐츠를 작성할 수 있습니다. . 더 많이 쓸수록 더 좋습니다🎜🎜이전 섹션에서 이야기한 내장 모듈 fs
의 stream
스트림도 여기에 사용됩니다. 주의해야 할 점은 node
서버의 res
매개변수는 기본적으로 쓰기 가능한 스트림이므로 res
를 직접 사용할 수 있다는 것입니다. code> for pipe
파이프라인에서🎜🎜서버를 구축하는🎜node
나stream
흐름에 대해 잘 모른다면 내장 모듈fs
를 읽어보세요. 이전 글: Node.js | End 서버 구축 후 (내장 모듈 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
,zlib
大家可能之前没听过,但gzip
应该都曾听过,gzip
是请求数据传输性能优化的一种很好的方式,看完本篇文章,相信你会对gzip
有了更深的理解
更多node相关知识,请访问:nodejs 教程!
위 내용은 gzip 압축을 위해 Node에 내장된 모듈 zlib를 사용하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!