Closed naholyr closed 7 years ago
Generated zip: formation-node-powidian (1).zip
Fully reproductible, it seems like a bug in easy-zip. For the record, I ran a benchmark of a few Zip solutions:
const files = [ /* bunch of files, including a PDF */ ]
;(() => {
const { EasyZip: Zip } = require('easy-zip')
const zip = new Zip()
zip.batchAdd(files.map(f => ({ source: f, target: f })), () => {
zip.writeToFile('easy-zip.zip', err => {
if (err) {
console.error('easy-zip', err)
}
})
})
})()
;(() => {
const { EasyZip: Zip } = require('easy-zip2')
const zip = new Zip()
zip.batchAdd(files.map(f => ({ source: f, target: f })), () => {
zip.writeToFile('easy-zip2.zip', err => {
if (err) {
console.error('easy-zip2', err)
}
})
})
})()
;(() => {
require('zipit')({
input: files
}, (err, buffer) => {
if (err) {
console.error('zipit', err)
} else {
require('fs').writeFile('zipit.zip', buffer, err => {
if (err) {
console.error('zipit (2)', err)
}
})
}
})
})
;(() => {
const { ZipFile } = require('yazl')
const zip = new ZipFile()
files.forEach(file => zip.addFile(file, file))
zip.outputStream.pipe(require('fs').createWriteStream('yazl.zip'))
.on('close', () => { /* end */ })
.on('error', err => console.error('yazl', err))
zip.end()
})()
;(() => {
const archiver = require('archiver')
const zip = archiver('zip', {})
files.forEach(file => zip.file(file))
zip.pipe(require('fs').createWriteStream('archiver.zip'))
.on('close', () => { /* end */ })
.on('error', err => console.error('yazl', err))
zip.finalize()
})()
Outputs:
3096K archiver.zip
3108K easy-zip.zip
3104K easy-zip2.zip
3104K yazl.zip
Then running unzip
command on each of them:
zipit
: did not generate any zip :/easy-zip
: error "invalid compressed data to inflate"easy-zip2
: worksyazl
: worksarchiver
: worksDamn you, easy-zip! OK, then, archiver
produces the smallest file but 8K are neglictible. Let's talk about time, running each of them independently (with time
, run twice to double-check):
easy-zip2
: 0.53user 0.02system 0:00.52elapsed 107%CPU (0avgtext+0avgdata 65188maxresident)yazl
: 0.32user 0.04system 0:00.31elapsed 118%CPU (0avgtext+0avgdata 37980maxresident)archiver
: 0.55user 0.03system 0:00.47elapsed 124%CPU (0avgtext+0avgdata 47520maxresident)Each execution gave a similar result: yazl
is almost twice as fast, consuming less memory, and generating a working zip.
THANK YOU!
Scenario:
slides.pdf
(generated from prez)