summaryrefslogtreecommitdiff
path: root/deps/node/benchmark/http/end-vs-write-end.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-04-03 15:43:32 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-04-03 15:45:57 +0200
commit71e285b94c7edaa43aa8115965cf5a36b8e0f80a (patch)
tree7d4aa9d0d5aff686b106cd5da72ba77960c4af43 /deps/node/benchmark/http/end-vs-write-end.js
parent7dadf9356b4f3f4137ce982ea5bb960283116e9a (diff)
downloadakono-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.js57
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();
+ });
+ });
+}