I am trying to Decompress and then Compress a Resource received , here from node fetch. As the script is brotly Compressed , i want to Decompress do some modification and Compress again but doing both DeCompress and Compress in pipe takes too long.
let fetch = require('node-fetch');
const {createBrotliCompress, createBrotliDecompress, brotliDecompress} = require('zlib');
(async () => {
console.log('Checking compression');
let url = 'https://www.youtube.com/s/desktop/25bf5aae/jsbin/desktop_polymer.vflset/desktop_polymer.js';
let resp = await fetch(url, {
method: "GET", headers: {
"Accept-Encoding": "gzip, deflate, br"
}, redirect: 'manual', response: 'stream', compress: false, credentials: true
});
let deComp = createBrotliDecompress({
chunkSize: 16 * 1024
});
let comp = createBrotliCompress({
chunkSize: 16 * 1024
});
// for await (const chunk of resp.body) {
// console.log(chunk.toString());
// }
// return;
let i = 0;
console.log('Status', resp.status);
resp.body.pipe(deComp).pipe(comp);
console.log('Pipe Start');
deComp.on('data', function (data) {
if (i++ === 0) {
console.log(`DE-C Chunk ${i++}: ${data.length}`);
// console.time('Got First Chunk');
console.time('Decompression end');
}
console.log(`DE-C Chunk ${i++}: ${data.length}`);
}).on("end", function () {
console.timeEnd('Decompression end');
}).on("error", function (e) {
console.log(e)
});
let j = 0;
comp.on('data', function (data) {
if (j++ === 0) {
console.log(`Chunk ${j++}: ${data.length}`);
// console.time('Got First Chunk');
console.time('Compression end');
}
console.log(`DC Chunk ${i++}: ${data.length}`);
}).on("end", function () {
console.timeEnd('Compression end');
}).on("error", function (e) {
console.log(e)
});
})()
Here the Entire Decompression and Compression takes 12 Sec , it should not take that much time
I am expecting it to be completed in less than 1.5 sec as the file Compressed is 1.6 MB and UnCompressed is 9.8 Mb