当前位置: 首页 > 后端技术 > Node.js

NodeBasics-zlib

时间:2023-04-04 00:00:56 Node.js

forResourceCompression本文节选自《Nodejs学习笔记》。更多章节和更新,请访问github主页地址。概述做过web性能优化的同学应该对性能优化杀手gzip不陌生。浏览器向服务器发起资源请求,比如下载一个js文件,服务器先对资源进行压缩,然后返回给浏览器,这样可以节省流量,加快访问速度。浏览器在HTTP请求头中添加Accept-Encoding来告诉服务器,“你可以使用gzip或defalte算法来压缩资源”。Accept-Encoding:gzip,deflate那么,在nodejs中如何压缩资源呢?答案是Zlib模块。GettingStartedExample:SimpleCompression/Decompression压缩示例非常简单的几行代码,就完成了对本地文件的gzip压缩。varfs=require('fs');varzlib=require('zlib');vargzip=zlib.createGzip();varinFile=fs.createReadStream('./extra/fileForCompress.txt');varout=fs.createWriteStream('./extra/fileForCompress.txt.gz');inFile.pipe(gzip).pipe(out);解压的例子也很简单,就是逆向操作。varfs=require('fs');varzlib=require('zlib');vargunzip=zlib.createGunzip();varinFile=fs.createReadStream('./extra/fileForCompress.txt.gz');varoutFile=fs.createWriteStream('./extra/fileForCompress1.txt');inFile.pipe(gunzip).pipe(outFile);服务器端gzip压缩代码超级简单。先判断是否包含accept-encodingheader,值为gzip。否:返回未压缩的文件。是:返回gzip压缩文件。varhttp=require('http');varzlib=require('zlib');varfs=require('fs');varfilepath='./extra/fileForGzip.html';varserver=http.createServer(function(req,res){varacceptEncoding=req.headers['accept-encoding'];vargzip;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');服务器字符串gzip压缩代码与前面的示例类似。这里,slib.gzipSync(str)用于使用gzip压缩字符串。varhttp=require('http');varzlib=require('zlib');varresponseText='helloworld';varserver=http.createServer(function(req,res){varacceptEncoding=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');后面写的deflate压缩的使用类似,这里不再赘述。更详细的使用方法,请参考官方文档。