Scaledrone Blog
May 15th, 2016

From Node.js to Go

Last month Scaledrone migrated all websocket servers from Node.js to Go. We are a push messaging company so using the best possible websocket solution is vital to us.

We started playing around with Go because the memory required per customer was very high. In the end we got more than we asked for as Go servers use a third of the memory that our Node.js servers did. In addition to the memory usage lowering, both response and connections times were reduced significantly.

Node.js vs Go


Node.js uses an event-driven, non-blocking I/O model which is a double-edged sword. On one side, it makes programming a breeze since you don't have to worry about concurrency at all. On the other side, both JavaScript and Node.js set limits to performance. Based on our experience the statically typed and concurrent Go is about 3 times faster and more lightweight than Node.js in a production environment. Not to say that Node.js is slow, it's fast enough for most use cases but when you do hit a limit Go can still go a long way.

Ease of use

I found Node.js a much simpler platform to use, mainly because there is no worrying about concurrency. While Go does provide some elegant patterns for dealing with concurrency you still have to take it into consideration as if you were writing any other concurrent language.


Both platforms have pretty active and growing ecosystems but as Node.js has been around the block longer it boasts more than double the modules. On some occasions I found no open source packages for Go even though there were multiple alternatives for Node.js.

Image from

Another thing I found bothersome were the generated GoDoc pages. They were ordinarily not as easy to understand as hand written Node.js GitHub readme pages and came with very few, if any, examples.


Both platforms have their strong suits. While I find Node.js more fun to use I cannot deny that migrating our most performance critical service to Go has given us a lot more breathing room.

I recommend Node.js for those who don't have to deal with hundreds of thousands or millions of concurrent connections and Go for those who do.


Scaledrone is a service for real-time push messaging
Try Scaledrone for free