戳白字“IMWeb后端街道社区
文/ 陈映平
源自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);
vargzip = 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);
vargunzip = 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];
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);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填充的使用也差不多,这里就不赘述。更多详细用法可参考官方文档。