Enable HTTPS keepAlive in Node.js

No clue how I am learning this only now, but better later than never: HTTPS keepAlive is not enabled by default in Node.js, and it has severe performance implications to network-intense applications.

Just to illustrate the impact, assuming that your s…


This content originally appeared on DEV Community and was authored by Gajus Kuizinas

No clue how I am learning this only now, but better later than never: HTTPS keepAlive is not enabled by default in Node.js, and it has severe performance implications to network-intense applications.

Just to illustrate the impact, assuming that your server is hosted in us-central1 and it is talking to a service in us-east1, just the network latency is ~20ms. Since a TCP handshake is a 3-packet event, this means that ~60ms are going to be allocated just to establish TLS handshake.

You can test that with a simple script:

const got = require('got');

const main = async () => {
  const response0 = await got('https://posthog.com/');

  console.log(response0.timings.phases);

  const response1 = await got('https://posthog.com/');

  console.log(response1.timings.phases);
};

main();

In this scenario, the above will produce:

{
  wait: 1,
  dns: 20,
  tcp: 72,
  tls: 74,
  request: 0,
  firstByte: 79,
  download: 222,
  total: 468
}
{
  wait: 0,
  dns: 1,
  tcp: 67,
  tls: 69,
  request: 1,
  firstByte: 73,
  download: 234,
  total: 445
}

However, watch the total time if we enable keepAlive:

const got = require('got');
const https = require('https');

https.globalAgent = new https.Agent({ keepAlive:true });

const main = async () => {
  const response0 = await got('https://posthog.com/');

  console.log(response0.timings.phases);

  const response1 = await got('https://posthog.com/');

  console.log(response1.timings.phases);
};

main();
{
  wait: 1,
  dns: 27,
  tcp: 77,
  tls: 75,
  request: 0,
  firstByte: 75,
  download: 220,
  total: 475
}
{
  wait: 0,
  dns: 0,
  tcp: 0,
  tls: 0,
  request: 0,
  firstByte: 77,
  download: 83,
  total: 160
}

The second request is 70% faster than the first request!

If your application relies on making many HTTPS calls, then simply enabling keepAlive is going to result in a significant performance improvement.


This content originally appeared on DEV Community and was authored by Gajus Kuizinas


Print Share Comment Cite Upload Translate Updates
APA

Gajus Kuizinas | Sciencx (2022-07-12T18:16:37+00:00) Enable HTTPS keepAlive in Node.js. Retrieved from https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/

MLA
" » Enable HTTPS keepAlive in Node.js." Gajus Kuizinas | Sciencx - Tuesday July 12, 2022, https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/
HARVARD
Gajus Kuizinas | Sciencx Tuesday July 12, 2022 » Enable HTTPS keepAlive in Node.js., viewed ,<https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/>
VANCOUVER
Gajus Kuizinas | Sciencx - » Enable HTTPS keepAlive in Node.js. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/
CHICAGO
" » Enable HTTPS keepAlive in Node.js." Gajus Kuizinas | Sciencx - Accessed . https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/
IEEE
" » Enable HTTPS keepAlive in Node.js." Gajus Kuizinas | Sciencx [Online]. Available: https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/. [Accessed: ]
rf:citation
» Enable HTTPS keepAlive in Node.js | Gajus Kuizinas | Sciencx | https://www.scien.cx/2022/07/12/enable-https-keepalive-in-node-js/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.