diff options
author | Brian White <mscdex@mscdex.net> | 2017-06-07 18:25:24 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-07-11 20:16:36 +0300 |
commit | b22a04b2c6b20d0b8993919389439a7c9528a19d (patch) | |
tree | 42ef74e8002a5be6afed7411fe774bb2962e4a91 /benchmark | |
parent | 2122e2fe89766ef6167d6655200283e7ca99f082 (diff) |
http: always cork outgoing writes
PR-URL: https://github.com/nodejs/node/pull/13522
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/fixtures/simple-http-server.js | 62 | ||||
-rw-r--r-- | benchmark/http/simple.js | 6 |
2 files changed, 33 insertions, 35 deletions
diff --git a/benchmark/fixtures/simple-http-server.js b/benchmark/fixtures/simple-http-server.js index 1dda98e9f2d..854d249ac80 100644 --- a/benchmark/fixtures/simple-http-server.js +++ b/benchmark/fixtures/simple-http-server.js @@ -27,13 +27,14 @@ module.exports = http.createServer(function(req, res) { dom.add(res); } - // URL format: /<type>/<length>/<chunks>/<responseBehavior> + // URL format: /<type>/<length>/<chunks>/<responseBehavior>/chunkedEnc var params = req.url.split('/'); var command = params[1]; var body = ''; var arg = params[2]; var n_chunks = parseInt(params[3], 10); var resHow = (params.length >= 5 ? params[4] : 'normal'); + var chunkedEnc = (params.length >= 6 && params[5] === 'false' ? false : true); var status = 200; var n, i; @@ -95,48 +96,43 @@ module.exports = http.createServer(function(req, res) { // example: http://localhost:port/bytes/512/4 // sends a 512 byte body in 4 chunks of 128 bytes - if (n_chunks > 0) { - switch (resHow) { - case 'setHeader': - res.statusCode = status; - res.setHeader('Content-Type', 'text/plain'); + var len = body.length; + switch (resHow) { + case 'setHeader': + res.statusCode = status; + res.setHeader('Content-Type', 'text/plain'); + if (chunkedEnc) res.setHeader('Transfer-Encoding', 'chunked'); - break; - case 'setHeaderWH': - res.setHeader('Content-Type', 'text/plain'); + else + res.setHeader('Content-Length', len.toString()); + break; + case 'setHeaderWH': + res.setHeader('Content-Type', 'text/plain'); + if (chunkedEnc) res.writeHead(status, { 'Transfer-Encoding': 'chunked' }); - break; - default: + else + res.writeHead(status, { 'Content-Length': len.toString() }); + break; + default: + if (chunkedEnc) { res.writeHead(status, { 'Content-Type': 'text/plain', 'Transfer-Encoding': 'chunked' }); - } - // send body in chunks - var len = body.length; + } else { + res.writeHead(status, { + 'Content-Type': 'text/plain', + 'Content-Length': len.toString() + }); + } + } + // send body in chunks + if (n_chunks > 1) { var step = Math.floor(len / n_chunks) || 1; - - for (i = 0, n = (n_chunks - 1); i < n; ++i) { + for (i = 0, n = (n_chunks - 1); i < n; ++i) res.write(body.slice(i * step, i * step + step)); - } res.end(body.slice((n_chunks - 1) * step)); } else { - switch (resHow) { - case 'setHeader': - res.statusCode = status; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Length', body.length.toString()); - break; - case 'setHeaderWH': - res.setHeader('Content-Type', 'text/plain'); - res.writeHead(status, { 'Content-Length': body.length.toString() }); - break; - default: - res.writeHead(status, { - 'Content-Type': 'text/plain', - 'Content-Length': body.length.toString() - }); - } res.end(body); } }); diff --git a/benchmark/http/simple.js b/benchmark/http/simple.js index 81b7cb5afb2..6dc69a2d8f6 100644 --- a/benchmark/http/simple.js +++ b/benchmark/http/simple.js @@ -6,8 +6,9 @@ var bench = common.createBenchmark(main, { // unicode confuses ab on os x. type: ['bytes', 'buffer'], len: [4, 1024, 102400], - chunks: [0, 1, 4], // chunks=0 means 'no chunked encoding'. + chunks: [1, 4], c: [50, 500], + chunkedEnc: ['true', 'false'], res: ['normal', 'setHeader', 'setHeaderWH'] }); @@ -16,7 +17,8 @@ function main(conf) { var server = require('../fixtures/simple-http-server.js') .listen(process.env.PORT || common.PORT) .on('listening', function() { - var path = `/${conf.type}/${conf.len}/${conf.chunks}/${conf.res}`; + var path = + `/${conf.type}/${conf.len}/${conf.chunks}/${conf.res}/${conf.chunkedEnc}`; bench.http({ path: path, |