The Performance Cost of Server Side Rendered React on Node.js

  • I created a simple Node.js application (Source on GitHub) with TypeScript that renders a HTML table of 100 rows of employee data from a JSON file with a number of different templating methods: – – For measure I threw in a simple Node HTTP server that dumped the content as…
  • I ran the benchmarks with concurrencies of 1, 5, 50, 100 and 250 and tracked throughput (requests / second) and the average response time (in Milliseconds of waiting for response).
  • Nunjucks scores second last, but beats React by a significant margin providing five times the throughput of ReactDOMServer on the latest Node.js (9.2.0) – – Native ES6 template literals and Pug are a close match, with Pug pulling ahead at a clear margin of 5 to 6 percent throughout the…
  • For the other libraries the average response times are consistent with throughput, although it seems that the native ECMAScript Template Literals provide a lower average response time, especially at high concurrencies; at 250 concurrent requests Pug takes an average of 81ms to respond, where native ES6 templates take around 40%…
  • Throughput stabilises for both options from concurrency of 5 or more, but for high concurrencies the response time for uncompiled templates grows respectively more.

It seems the original results for React.js have not been optimal, since the Node environment had not been set to production. In this env thus React does a lot of extra work under the hood. Thank you to Anatoli Papirovski for noticing this and the additional PR to further optimise performance.

It seems the original results for React.js have not been optimal, since the Node environment had not been set to production. In this env thus React does a lot of extra work under the hood. Thank you to Anatoli Papirovski for noticing this and the additional PR to further optimise performance.

This was completely my own oversight, not a conspiracy to make React look bad as some have suggested. I have now updated the results, and it seems with production environment React on the server is in practice equivalent to the Nunjucks engine. For now all references are to React SSR without NODE_ENV=production, keep that in mind and the article is valid reading.

I will update the article in the coming days with a complete suite of benchmarks with and without prod environment for all libraries, and adding run with Mithril SSR rendering while I’m at it.

— Jani

I like React as a templating engine, not only on the client side but on the server as well. Over the last year or two rendering templates with React.js on the server has become commonplace. Services from rather static content driven sites to Universal JavaScript Applications built on frameworks like Next.js are serving dynamic of server side rendered views using React.

While I like the concept of the guarantees of structure and validity, I do recognise that there’s a lot of overhead in how it works for constructing just a single…

The Performance Cost of Server Side Rendered React on Node.js