I believe that as the initial hype has expired, and as people have moved from the basic ‘it is very easy to write a website that is high performance’ to a realisation that actually the non-blocking single threaded nature of Node is only part of the solution to its proclaimed scalability in many scenarios, we may have hit ‘peak Node’.
There are positives and negatives to Node, as with any language or framework.
- If you need anything other than a trivial application, you need to follow exactly the same types of architecture that have been in use for some time in other languages. Node is not going to suddenly provide scalability just by being able to offer a single non-blocking thread.
- For example, you will typically need to offload compute intensive, external calls or long running processes via a Service Bus or Message Queue to scalable worker processes (sometimes referred to now as Micro Services).
- As people try to use Node in real enterprise scenarios, there is now an element of attempting to ‘reinvent the wheel’, by adding package upon package to patch on functionality that already exists in languages such as Java, .Net, Ruby and to a certain extent PHP.
- When you actually compare the performance of Node to say an OWIN based Web API service, the Web API actually is able to match or outperform Node while offering greater functionality built in a strongly typed language.
- As the realisation dawns that Node based architectures are actually trying to attain features that enterprise grade, strongly typed languages have had for over a decade, with mature and optimised solutions for many problems, it becomes apparent to more people that Node is not a single solution to all scenarios (and neither is any other language).
Update 2015: I note that a graph has been used in one other answer that shows amazing growth rates for Node.js jobs advertised on the Indeed website. That seems pretty impressive…
… until you realise, that is actually a bit disingenuous, as it relative to a base that was effectively zero. Switching the exact same graph to display absolute data tells a very different story:
Looking at Percentage of Matching job postings, it would seem that in fact, Node.js is, effectively, irrelevant – tip: the top orange line is for PHP, the lower, pale orange line hidden amongst scala, erlang, rails, is Node.js.
Top Job Trends
My point on this, is that people should be careful not to fall for the over-hype that surrounds Node.js.
I believe I should add three points, a mix of pros and cons for Node.
a) Nodes initial breakthrough was non-blocking IO. Since then, many other mainstream languages have adopted the asynchronous approach that Node pioneered. As I mentioned in my initial answer, Node is not the only tool that should be considered, but it is highly appropropriate in certain circumstances. Microsoft has subsequently released .Net Core with high performance async / await and the ability to use fibers (Coroutines), and Google has subsequently released Go, which also offers concurrency via Coroutines (which they have named Goroutines). I highly recommend looking into these approaches ()
b) The advent of serverless computing (e.g. Google Cloud Platforms Cloud Functions, Microsoft’s Azure Functions, and AWS Lambda) complement Node very well, and can simplify the implementation of scaling of a Node API that also requires compute-intensive workflows.
My original assessment still stands – Node is very suitable for some applications, but it is not the only approach that can be used. Usage appears to have plateaued, with the advent of languages such as Go.