Node で gzip 圧縮を実行するにはどうすればよいですか?以下の記事では、Node の組み込みモジュール zlib が gzip 圧縮を行う様子を紹介していますので、皆様のお役に立てれば幸いです。
パフォーマンス最適化運用にはサーバーサイドの開発が不可欠ですが、フロントエンドとバックエンドでのデータ転送にHTTPインターフェース(API)を使用する場合、データ量が少ないと、転送されるデータが大きすぎると、必然的にリクエストがタイムアウトするか失敗する可能性があります。
nodejs
は zlib
組み込みモジュールを提供します。その gzip
メソッドを使用して、渡されたデータを圧縮し、それによってデータを改善できます。伝達効率。 [関連チュートリアルの推奨事項: nodejs ビデオ チュートリアル ]
#GZIP
HTTP プロトコルでのエンコードは、WEB アプリケーションの
パフォーマンスを向上させるために使用される技術です #これは通常、サーバーにインストールされている機能を指します。誰かがこのサーバーの Web サイトにアクセスすると、サーバーのこの機能 が Web コンテンツ
この方法で送信が高速になります。その結果、URL をクリックした後すぐにデータが表示され、ユーザー エクスペリエンスが向上します。 . もちろん、これにより
サーバーの負荷も増加します。一般に、この機能モジュールはサーバーにインストールされます ファイル サイズの削減には 2 つの明らかな利点があります:
第一に、ストレージ容量を削減できます。#第二に、ネットワーク経由でファイルを転送するときに、送信時間を短縮できます。
簡単に言えば、gzip と zlib の関係は何ですか?gzip は実際にはサーバー (バックエンド) で使用されるメソッドです。およびクライアント (フロントエンド) ) データを圧縮する方法
です。その API は、gzip
ファイルの両方をサポートしています簡略化された データ フロー
formatDEFLATE は、LZ77 アルゴリズム
ハフマン コーディング (ハフマン コーディング) の両方を使用します。HTML(World Wide Web での送信を高速化する方法)
HTTP
圧縮における可逆データ圧縮アルゴリズム
gzip
およびその他のコンテンツ テクノロジーしたがって、
zlib
は gzip
に基づいてコンテンツを追加すると言えます。これが理由です
gzip
メソッドは、zlib
組み込みモジュール内にあります。これは、通常のデータ送信
を使用するためです。
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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("服务器启动啦!");
});</pre><div class="contentsignin">ログイン後にコピー</div></div>
これは単純な
サーバー、ブラウザがアクセスすると、index.html
が返されます。この
には、書き込むほど好きな内容を書き込めます。より良い前のセクションで説明した組み込みモジュール
fs
の stream
ストリームもここで使用されます。
node サーバーの
res パラメーターは本質的に書き込み可能なストリームであるため、
pipe で res を直接使用できます。 Pipeline
サーバーの構築
node
や組み込みモジュール fs## の
stream
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
的一个非常实用的小模块zlib
,zlib
大家可能之前没听过,但gzip
应该都曾听过,gzip
是请求数据传输性能优化的一种很好的方式,看完本篇文章,相信你会对gzip
有了更深的理解
更多node相关知识,请访问:nodejs 教程!
以上がNode の組み込みモジュール zlib を gzip 圧縮に使用する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。