diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-04-03 15:43:32 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-04-03 15:45:57 +0200 |
commit | 71e285b94c7edaa43aa8115965cf5a36b8e0f80a (patch) | |
tree | 7d4aa9d0d5aff686b106cd5da72ba77960c4af43 /deps/node/benchmark/http/end-vs-write-end.js | |
parent | 7dadf9356b4f3f4137ce982ea5bb960283116e9a (diff) | |
download | akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.gz akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.bz2 akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.zip |
Node.js v11.13.0
Diffstat (limited to 'deps/node/benchmark/http/end-vs-write-end.js')
-rw-r--r-- | deps/node/benchmark/http/end-vs-write-end.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/deps/node/benchmark/http/end-vs-write-end.js b/deps/node/benchmark/http/end-vs-write-end.js new file mode 100644 index 00000000..b4ca560b --- /dev/null +++ b/deps/node/benchmark/http/end-vs-write-end.js @@ -0,0 +1,57 @@ +// When calling .end(buffer) right away, this triggers a "hot path" +// optimization in http.js, to avoid an extra write call. +// +// However, the overhead of copying a large buffer is higher than +// the overhead of an extra write() call, so the hot path was not +// always as hot as it could be. +// +// Verify that our assumptions are valid. +'use strict'; + +const common = require('../common.js'); + +const bench = common.createBenchmark(main, { + type: ['asc', 'utf', 'buf'], + len: [64 * 1024, 128 * 1024, 256 * 1024, 1024 * 1024], + c: [100], + method: ['write', 'end'] +}); + +function main({ len, type, method, c }) { + const http = require('http'); + var chunk; + switch (type) { + case 'buf': + chunk = Buffer.alloc(len, 'x'); + break; + case 'utf': + chunk = 'ΓΌ'.repeat(len / 2); + break; + case 'asc': + chunk = 'a'.repeat(len); + break; + } + + function write(res) { + res.write(chunk); + res.end(); + } + + function end(res) { + res.end(chunk); + } + + const fn = method === 'write' ? write : end; + + const server = http.createServer((req, res) => { + fn(res); + }); + + server.listen(common.PORT, () => { + bench.http({ + connections: c + }, () => { + server.close(); + }); + }); +} |