-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
69 lines (61 loc) · 1.7 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
- write a command-line script that compresses files uszing zlib algorithms
- measure time and compression efficiency
- Utilize streams
*/
import { createGzip, createBrotliCompress, createDeflate } from "zlib"
import { PassThrough, pipeline, Transform } from "stream"
import { createReadStream, createWriteStream } from "fs"
import { hrtime } from "process";
const filename = process.argv[2]
const algorithmList = [
{
name: "Gzip",
method: createGzip
},
{
name: "Brotli",
method: createBrotliCompress
},
{
name: "Deflate",
method: createDeflate
}
]
function algorithmMeasurement(algorithm, file, algorithmName){
let startTimer
let totalBytes = 0
let endTimer
const monitor = new PassThrough()
monitor.on('data', (chunk) => {
totalBytes += chunk.length
})
monitor.on('finish', () => {
endTimer = hrtime.bigint()
console.log(`${algorithmName}: ${totalBytes} Bytes in ${hrtime.bigint() - startTimer} nano seconds`)
})
pipeline(
createReadStream(file),
new Transform({
defaultEncoding: 'utf8',
transform (chunk, encoding, cb) {
startTimer = hrtime.bigint()
cb()
},
flush (cb) {
cb()
}
}),
algorithm(),
monitor,
(err)=>{
console.log(err)
}
)
}
async function main(){
for(const algorithm of algorithmList){
await algorithmMeasurement(algorithm.method,filename,algorithm.name)
}
}
main()