Performance Showdown: Node.js vs. io.js v2.0.0

Callum GavinNode.js, Web Development36 Comments

node performance

We noted with some interest the recent announcement of the io.js v2.0.0 release candidate. This community fork of node.js promises a supported version of the V8 engine, along with a greatly increased frequency of commits to master vs. the parent project.

As we’ve mentioned before, we’re keen on these developments as Node.js powers the Raygun API nodes, and ensuring these can handle the highest loads with the lowest possible response times is crucial to providing a great service to our users. A previous blog post benchmarked Node.js vs. io.js, and with the advent of the V2 release of the latter, we’d like to revisit those benchmarks to see how it stacks up in various situations.

node-vs-io 2

The set up

Same as before, the following are synthetic micro-benchmarks, caveat emptor, huge grain of salt, etc. However, the charts do provide some interesting food for thought, and may provide a springboard for you to perform your own real-world tests, and potentially gain a significant speedup.

The benchmarks were conducted with identical runs through ApacheBench on a 64-bit Ubuntu VM. The configuration was 20,000 requests with a concurrency level of 100, and the test results were averaged over five runs of this.

We benchmarked two versions of node, and two versions of io.js. For node, v0.10.38 (the last release of the .10 branch) was compared against v0.12.2 (the absolute latest version of node.js).

For io.js, we compared v1.8.1, the last release on the 1.x branch against the newest v2.0.0 release.

Raw JSON response

This test involved created a simple server with the http module, and setting it to return a JSON payload on request. The results were:

1

What is interesting to note is the performance drop from node 0.10 to 0.12, which io.js corrects on the 1.x branch – but then dominates with v2.0.0.

When sending a raw response, in this benchmark io.js v2.0.0 has a 14% speedup over node 0.12! They’ve even managed a 5% speedup over their own previous release. Not bad at all, but there’s more we can test.

Express.js

Express was and is still a very popular choice for quickly getting the backend of a web application up and running. Last time we documented some of the performance hit you take with it, but let’s see how it does under node 0.12 vs io.js v2.0.0:

2

There’s a 4.5% speedup when running this test on io.js v2.0.0 – pretty good for an older framework (considering how fast the JS ecosystem is moving)!

Koa.js on Node vs io.js

Many newer frameworks are competing for mindshare in the JS micro web framework space, however – we benchmarked some popular ones previously. One which we missed was Koa.js, which was in fact made by the authors of Express.js.

One of the huge benefits with Koa is that you can build code using ES6 features – including generators and the yield syntax which enable asynchronous code (no more callback hell). This benchmark was written using generators and run with the node --harmony flag enabled. The logic involved a simple bit of routing, and set the response to be an HTML fragment.

Let’s see how Koa does running on Node vs. io.js:

3-2

A 14.8% speedup from Node to the latest version of io.js – certainly worthy of note. If you’re looking at one of the latest generation of JS backend frameworks, it certainly pays to give io.js a look as out-of-the-box you get some rather impressive perf improvements. When running a cluster of VMs using the Node stack, depending on scale, that speedup may result in several fewer boxes needed and correspondingly less infrastructure costs – all for free.

We do error tracking

We love perf improvements here at Raygun, so if you have any experience running io.js or Node in production feel free to post in the comments. We also have a kickass Node error tracking implementation – there’s a free 14 day trial of Raygun available here. Keep improving that perf, and blasting those errors!

Next level software intelligence across your entire stack. Get deeper analysis into how your applications are really performing. Learn more.

36 Comments on “Performance Showdown: Node.js vs. io.js v2.0.0”

        1. Jeffrey Gilbert

          By the very nature of it extending express, it is effectively making it less performant. Express and Koa are two different frameworks. Hapi is entirely different as well, and per robotos comments warrants a fair comparison. The thing with Hapi is it will benchmark lower than either koa or express due to the additional checks it does to add sanity to your application code so an error doesn’t take down the process. If the comparison is hapi on node.js vs hapi on io.js, it’s relevant.

    1. Dexter Miguel

      How about no…? Like, don’t even bother benchmarking anything that is built on top of Express?

  1. Gergely Nemeth

    This article is everything what is wrong with diagrams – if you do not read carefully just go through it quickly you may have the impression that iojs is 2-3 times faster than Node

    1. Mihail

      I think you can look at diagrams without reading the article and understand that iojs is faster than nodejs, and judging the numbers on the left (requests per second) without actually using a calculator you can aproximate a 10% performance advantage for iojs over nodejs.
      My point is that that there are things that are wrong with diagrams because they don’t always make sense without accompanying explanations, but the diagrams in this article don’t have that issue.

  2. Pingback: 1p – Performance: Node.js vs. IoJS 2.0.0 | Exploding Ads

  3. Ahmed

    First rule of bar graph; START the y axes at 0.

    In all 3 graphs you chose a random starting point which absolutely defeats the point of a graph… How are we supposed to visual figure out the % delta? Absolutely useless graphs…

  4. Pingback: Node.js: Etwas endet, etwas beginnt - jaxenter.de

  5. Pingback: Node Roundup: TJ Steps Down, Node and io.js Performance, Cloud Commander, Blessed | The Web Geek

  6. Pingback: Node Roundup: TJ Steps Down, Node and io.js Performance, Cloud Commander, Blessed | CodangoNet

  7. Pingback: Node Roundup: TJ Steps Down, Node and io.js Performance, Cloud Commander, Blessed - InfoLogs

  8. tibalt

    After seeing the graphs starting from 0 the whole existence of this article is questionable, cause there is almost no visual difference in performance.

    1. Andreas West

      Since when is visual the way to count. You can change the graph you want, it’s still 14.8% speedup on the last benchmark. Honestly guys, focus on how the test was run, which framework you might want to see tested as well and stop bitching about not seeing a visual difference.

      Obviously all of you don’t manage a large cluster otherwise you would understand that this means a lot of money being saved here. Guess why Walmart moved to io.js?

  9. Pingback: Node Roundup: TJ Steps Down, Node and io.js Performance, Cloud Commander, Blessed | Designer News

    1. Jeffrey Gilbert

      Erlang is not relevant to this conversation, unless you can run javascript driven backend applications with it. But you wouldn’t, because it’s Erlang.

  10. Pingback: Performance Showdown: Node.js vs. io.js v2.0.0 - Iliyan Trifonov's Blog

  11. sdsd

    Erlang is not relevant to this conversation, unless you can run javascript driven backend applications with it. But you wouldn’t, because it’s Erlang.

  12. Chris Rueber

    The comments on this article are downright goofy. I found the examples to be extremely informative, and if you took the time to actually read the charts, it’s very clear exactly what is going on.

    Lets put this in real perspective: 14% of 100 servers is 14 less servers you have to pay for. Even 4% is significant. Thanks for the benchmarks, Raygun. Good stuff.

  13. Pingback: NodeJS: The good, the bad and the Javascript – Part 1 | Tarcio Saraiva

  14. Pingback: Node Weekly No.86 | ENUE Blog

  15. Pingback: NodeJS 4.0.0 is 8% faster - we tested it! - The Raygun Blog

  16. Pingback: NodeJS 4.0.0 is 8% faster – we tested it! | Raygun

  17. Pingback: IO.JS on Mac | Darryl Dias

  18. Pingback: Node.js & io.js Back Together Again - Application Performance Monitoring Blog | AppDynamics

  19. Pingback: IO.JS on Mac – Darryl Dias

  20. Pingback: NodeJs: salto de versión de 0.12.x a 4 y 5 | TheProgrammingPlanet

Leave a Reply

Your email address will not be published. Required fields are marked *