assetgraph-builder-esprima
Version:
Build system for web sites and applications
39 lines (34 loc) • 1.4 kB
JavaScript
var async = require('async'),
_ = require('lodash'),
AssetGraph = require('../AssetGraph');
module.exports = function (queryObj) {
return function gzip(assetGraph, cb) {
var compress,
gzipAssets = assetGraph.findAssets(_.extend({isInline: false}, queryObj));
if (gzipAssets.length > 0) {
try {
compress = require('node-zopfli');
} catch (e) {
assetGraph.emit('info', new Error('node-zopfli is not available, using less efficient zlib compression'));
compress = require('zlib');
}
}
async.eachLimit(gzipAssets, 4, function (asset, cb) {
// http://webmasters.stackexchange.com/questions/31750/what-is-recommended-minimum-object-size-for-gzip-performance-benefits
if (asset.rawSrc.length <= 860) {
return cb();
}
compress.gzip(asset.rawSrc, function (err, gzippedRawSrc) {
if (err) {
assetGraph.emit('error', err);
} else if (gzippedRawSrc.length < asset.rawSrc.length) {
assetGraph.addAsset(new AssetGraph.Asset({
url: asset.url.replace(/(?=[\?#]|$)/, '.gz'),
rawSrc: gzippedRawSrc
}));
}
cb();
});
}, cb);
};
};