Skip to content

Commit add4b0a

Browse files
mscdexjasnell
authored andcommitted
zlib: improve performance
PR-URL: #13322 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Matteo Collina <[email protected]>
1 parent e5dc934 commit add4b0a

File tree

7 files changed

+482
-360
lines changed

7 files changed

+482
-360
lines changed

benchmark/zlib/creation.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
var common = require('../common.js');
3+
var zlib = require('zlib');
4+
5+
var bench = common.createBenchmark(main, {
6+
type: [
7+
'Deflate', 'DeflateRaw', 'Inflate', 'InflateRaw', 'Gzip', 'Gunzip', 'Unzip'
8+
],
9+
options: ['true', 'false'],
10+
n: [5e5]
11+
});
12+
13+
function main(conf) {
14+
var n = +conf.n;
15+
var fn = zlib['create' + conf.type];
16+
if (typeof fn !== 'function')
17+
throw new Error('Invalid zlib type');
18+
var i = 0;
19+
20+
if (conf.options === 'true') {
21+
var opts = {};
22+
bench.start();
23+
for (; i < n; ++i)
24+
fn(opts);
25+
bench.end(n);
26+
} else {
27+
bench.start();
28+
for (; i < n; ++i)
29+
fn();
30+
bench.end(n);
31+
}
32+
}

benchmark/zlib/deflate.js

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
'use strict';
2+
var common = require('../common.js');
3+
var zlib = require('zlib');
4+
5+
var bench = common.createBenchmark(main, {
6+
method: ['createDeflate', 'deflate', 'deflateSync'],
7+
inputLen: [1024],
8+
n: [4e5]
9+
});
10+
11+
function main(conf) {
12+
var n = +conf.n;
13+
var method = conf.method;
14+
var chunk = Buffer.alloc(+conf.inputLen, 'a');
15+
16+
var i = 0;
17+
switch (method) {
18+
// Performs `n` writes for a single deflate stream
19+
case 'createDeflate':
20+
var deflater = zlib.createDeflate();
21+
deflater.resume();
22+
deflater.on('finish', () => {
23+
bench.end(n);
24+
});
25+
26+
bench.start();
27+
(function next() {
28+
if (i++ === n)
29+
return deflater.end();
30+
deflater.write(chunk, next);
31+
})();
32+
break;
33+
// Performs `n` single deflate operations
34+
case 'deflate':
35+
var deflate = zlib.deflate;
36+
bench.start();
37+
(function next(err, result) {
38+
if (i++ === n)
39+
return bench.end(n);
40+
deflate(chunk, next);
41+
})();
42+
break;
43+
// Performs `n` single deflateSync operations
44+
case 'deflateSync':
45+
var deflateSync = zlib.deflateSync;
46+
bench.start();
47+
for (; i < n; ++i)
48+
deflateSync(chunk);
49+
bench.end(n);
50+
break;
51+
default:
52+
throw new Error('Unsupported deflate method');
53+
}
54+
}

0 commit comments

Comments
 (0)