Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

http: pack response body buffer in first tcp packet #4443

Closed
wants to merge 6 commits into from

Conversation

bnoordhuis
Copy link
Member

Apply the same optimization to res.end(buf) that is applied to res.end(str).

Speeds up node benchmark/http_simple_auto -k -c 1 -n 25000 buffer/1
(non-chunked response body) by about 750x. That's not a typo.

Chunked responses:

$ cat tmp/http-chunked-client.js
// Run `node benchmark/http_simple` in another terminal.
var http = require('http'), url = require('url');
var options = url.parse('http://127.0.0.1:8000/buffer/1/1');
options.agent = new http.Agent({ maxSockets: 1 });
for (var i = 0; i < 25000; ++i) http.get(options);

Before:

$ time out/Release/node tmp/http-chunked-client.js
real    16m40.411s
user    0m9.184s
sys     0m0.604s

After:

$ time out/Release/node tmp/http-chunked-client.js
real    0m5.386s
user    0m2.768s
sys     0m0.728s

That's still a 185x speed-up.

Fixes #4415.

mscdex and others added 6 commits December 16, 2012 17:25
Make parser errors bubble up to the ClientRequest instead of the underlying
net.Socket object.

This is a back-port of commit c78678b from the master branch.

Fixes nodejs#3776.
Man pages go into $PREFIX/man on OpenBSD, not $PREFIX/share/man.
Use res.end() for the final chunk so we can benchmark the 'hot path' shortcut
in lib/http.js that packs the headers and the body into a single packet.
Apply the same optimization to res.end(buf) that is applied to res.end(str).

Speeds up `node benchmark/http_simple_auto -k -c 1 -n 25000 buffer/1`
(non-chunked response body) by about 750x. That's not a typo.

Chunked responses:

  $ cat tmp/http-chunked-client.js
  // Run `node benchmark/http_simple` in another terminal.
  var http = require('http'), url = require('url');
  var options = url.parse('http://127.0.0.1:8000/buffer/1/1');
  options.agent = new http.Agent({ maxSockets: 1 });
  for (var i = 0; i < 25000; ++i) http.get(options);

Before:

  $ time out/Release/node tmp/http-chunked-client.js
  real    16m40.411s
  user    0m9.184s
  sys     0m0.604s

After:

  $ time out/Release/node tmp/http-chunked-client.js
  real    0m5.386s
  user    0m2.768s
  sys     0m0.728s

That's still a 185x speed-up.

Fixes nodejs#4415.
@bnoordhuis
Copy link
Member Author

See #4444.

@bnoordhuis bnoordhuis closed this Dec 20, 2012
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants