Node基础:资源压缩之zlib

2023-05-26 0 210

Node基础:资源压缩之zlib戳白字“IMWeb后端街道社区

Node基础:资源压缩之zlib

文/ 陈映平

源自IMWeb街道社区

(以内翻转查阅标识符)

0概要

做过web操控性强化的老师,对操控性强化大杀器gzip如果不孤单。应用程序向伺服器发动天然资源允诺,比如说浏览两个js文档,伺服器Fossat天然资源展开填充,再回到给应用程序,以节约网络流量,大力推进网络网络流量。

应用程序透过HTTP允诺颈部里加之Accept-Encoding,说伺服器,“你能用gzip,或是defalte演算法填充资源”。

Accept-Encoding:gzip, deflate

所以,在nodejs里,是怎样对天然资源展开填充的呢?标准答案是Zlib组件

1入门示例

1.1 填充的例子

非常简单的几行标识符,就完成了本地文档的gzip填充。

var fs = require(fs

);

var zlib = require(zlib

);

var

gzip = zlib.createGzip();

varinFile = fs.createReadStream(./extra/fileForCompress.txt

);

var out = fs.createWriteStream(./extra/fileForCompress.txt.gz

);

inFile.pipe(gzip).pipe(out);

1.2 解压的例子

同样非常简单,是个反向操作。

var fs = require(fs

);

var zlib = require(zlib

);

var

gunzip = zlib.createGunzip();

var inFile = fs.createReadStream(./extra/fileForCompress.txt.gz

);

varoutFile = fs.createWriteStream(./extra/fileForCompress1.txt); inFile.pipe(gunzip).pipe(outFile);

2服务端gzip填充

标识符超级简单。首先判断 是否包含 accept-encoding 首部,且值为gzip

否:回到未填充的文档。

是:回到gzip填充后的文档。

var http = require(http

);

var zlib = require(zlib

);

var fs = require(fs

);

var filepath = ./extra/fileForGzip.html

;

varserver = http.createServer(function(req, res)

{

   
var acceptEncoding = req.headers[accept-encoding

];

   
var

gzip;

   
if(acceptEncoding.indexOf(gzip)!=-1

){

   
// 判断是否需要gzip填充        gzip = zlib.createGzip();        // 记得响应 Content-Encoding,说应用程序:文档被 gzip 填充过        res.writeHead(200

, {

             Content-Encoding: gzip});        fs.createReadStream(filepath).pipe(gzip).pipe(res);    }else{        fs.createReadStream(filepath).pipe(res);    } }); server.listen(3000);

3服务端字符串gzip填充

标识符跟前面例子大同小异。这里采用了slib.gzipSync(str)对字符串展开gzip填充。

var http = require(http

);

var zlib = require(zlib

);

var responseText = hello world

;

varserver = http.createServer(function(req, res)

{

   
var acceptEncoding = req.headers[accept-encoding

];

   
if(acceptEncoding.indexOf(gzip)!=-1){        res.writeHead(200

, {

           
content-encoding: gzip});        res.end( zlib.gzipSync(responseText) );    }else{        res.end(responseText);    } }); server.listen(3000);

4写在最后

deflate填充的使用也差不多,这里就不赘述。更多详细用法可参考官方文档

Node基础:资源压缩之zlib

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务