Bagaimana untuk melaksanakan pemampatan gzip dalam Node? Artikel berikut memperkenalkan kaedah mampatan gzip modul terbina dalam Node saya harap ia akan membantu semua orang.
Sebarang pembangunan bahagian pelayan amat diperlukan untuk operasi pengoptimuman prestasi apabila menggunakan antara muka HTTP (API) untuk pemindahan data di bahagian hadapan dan belakang, jika jumlah data dipindahkan terlalu besar, ia pasti akan menyebabkan Permintaan tamat masa atau gagal.
nodejs
memberikan kami zlib
modul terbina dalam, dan kami boleh menggunakan kaedah gzip
nya untuk memampatkan data yang dihantar, sekali gus meningkatkan kecekapan penghantaran data. [Cadangan tutorial berkaitan: tutorial video nodejs]
HTTP
Pengekodan GZIP
pada protokol ialah teknologi yang digunakan untuk meningkatkan prestasi aplikasi WEB
Ini secara amnya merujuk kepada pemasangan dalam pelayan Apabila seseorang melawat tapak web dalam pelayan ini, fungsi dalam pelayan ini memampatkan kandungan web dan kemudian menghantarnya ke pelayar komputer yang dilawati untuk paparan Secara umumnya, kandungan teks biasa boleh dimampatkan kepada 40%. daripada saiz asal
Dengan cara ini pemindahan akan menjadi lebih cepat Kesannya ialah data akan dipaparkan dengan cepat selepas anda mengklik pada URL, sudah tentu, ini juga akan meningkatkan beban pelayan., modul fungsi ini biasanya dipasang dalam pelayan
Mengurangkan saiz fail mempunyai dua faedah yang jelas:
Apabila kita memindahkan data tempatan, jika fail terlalu besar kita sering menggunakan Teknologi pemampatan fail (zip atau rar, dsb.) memampatkan fail besar menjadi fail kecil untuk penghantaran, dan penerima kemudiannya boleh menyahmampatkannya Kerana kelajuan pemampatan secara amnya agak cepat, ini boleh mengurangkan masa yang dihabiskan dalam masa proses pemindahan fail, dengan itu meningkatkan kecekapan
Ringkasnya, gzip
sebenarnya adalah kaedah untuk memampatkan data antara pelayan (bahagian belakang) dan klien (bahagian hadapan)
zlib
ialah DEFLATE
pustaka pelaksanaan algoritma APInya menyokong kedua-dua format fail gzip
dan strim data yang dipermudahkan. format
DEFLATE
ialahLZ77算法
algoritma pemampatan data tanpa kehilangan yang menggunakan kedua-dua哈夫曼编码(Huffman Coding)
dan pada masa yang sama
gzip
dalam HTTP
Mampatan, teknologi yang mempercepatkan penghantaran HTML
dan kandungan lain dalam World Wide Web
Jadi boleh dikatakan bahawa zlib
menambah beberapa kandungan berdasarkan gzip
, itulah sebabnya node
Sebab mengapa kaedah gzip
berada dalam zlib
modul terbina dalam
Kami menggunakan node
untuk membina pelayan untuk menunjukkan cara kami memindahkan data Cara biasa:
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("服务器启动啦!"); });
Ini adalah pelayan node
yang mudah, selepas pelayar mengaksesnya, ia akan mengembalikan index.html
kepada kami, ini index.html
Anda boleh menulis apa sahaja yang anda mahu, lebih banyak anda menulis, lebih baik
Aliran fs
dalam modul terbina dalam stream
yang kita bincangkan pada sebelumnya bahagian juga digunakan di sini Perlu diingatkan bahawa , parameter node
dalam pelayan res
pada dasarnya adalah aliran boleh tulis, jadi kami boleh terus menggunakan res
dalam saluran paip pipe
🎜>
Jika anda berminat denganJalankan failJika anda tidak tahu banyak tentang membina pelayan atau aliran
node
modul terbina dalamfs
, anda boleh membaca artikel saya sebelum ini:stream
Node.js |. Membina pelayan bahagian belakang (termasuk penggunaan modul terbina dalam http | url | rentetan pertanyaan) Node.js |
dan gunakan penyemak imbas untuk mengakses pelayan server.js
: node
97.6kb (ia bergantung pada kandungan anda) index.html
untuk mengubah contoh penghantaran data biasa di atas: 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 教程!
Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan modul terbina dalam Node zlib untuk pemampatan gzip. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!