Node.js is an open source runtime environment which is based on Google’s V8 JavaScript engine. Many companies and frameworks had attempted to run JavaScript on the server, but Node.js was the first runtime which was good at doing it at scale.
Node.js was first written in 2009, and since then its popularity has risen immensely. The list of companies using Node.js is big enough and includes such as IBM, LinkedIn, Microsoft, PayPal, and Yahoo!. Here is the link with projects, applications, and companies using node.js https://github.com/nodejs/node-v0.x-archive/wiki/Projects,-Applications,-and-Companies-Using-Node
The node.js package manager npm became the biggest package manager in the software world in 2014, and now has almost twice as many modules as similar package managers from Java and Ruby.
Benefits
JavaScript is everywhere on the web
JavaScript won a number of browser-side languages and technologies to become the “language of the web”. Now JavaScript is on the server-side, in databases, in the internet of things, robotics and more.
Performance
There are two fundamental reasons why Node.js is quick. To begin with, it uses the Chrome V8 JavaScript engine. Second is the event loop. Node.js performs I/O non-blocking and asynchronously. As opposed to blocking parallel threads, a task is sent to the event loop with a callback and proceeds with execution. Once it finishes the async task, the callback is invoked. This approach uses less memory and it is usually simpler to program. It is likewise especially quick for I/O operations.
Npm
Npm is the package manager for Node.js and is one of the reasons for the popularity and growth of Node.js. Npm makes adding libraries and third party modules very easy, handling all of the dependencies for you. Moreover, there are about 225k modules in npm with 2.5B downloads per month.
Tools
Node.js projects range from small and simple libraries to fully blown applications. You can not only run your entire back-end on Node.js but also you can run other aspects of your engineering operations and online presence with Node.js based software. There are basic libraries like Lodash for various utility functions or Async to help with control flow in your asynchronous code. There are drivers for working with all the SQL and NOSQL databases. There are web frameworks like Express or HapiJS. There are two popular tools for build/task runners, Grunt and Gulp. For testing, there are a few great frameworks such as Mocha, Jasmine, and Lab, which includes code coverage. A great tool for managing your Node.js processes is PM2. You can run a message broker with MQTT using Mosca. If you need a continuous integration/delivery server, then there is StriderCD. You can even use HarpJS for static website generation, Ghost for blogging, and NodeBB for community forums.
A large active community
The size and usage of npm makes it clear about the size of the Node.js community. There are various resources to learn Node.js together with approximately 105k questions on StackOverfow. Most Node.js project owners are quite responsive. There are a number of blogs posts, books, open source modules, active IRC channels, several Meetup groups, conferences, and even a few consulting firms dedicated to Node.js.
When to use Node.js
Node.js is built on great non-blocking event driven architecture model. In case your project or module can really make advantage for this model, then go for it. Some of the cases could be the following:
- Single page applications (web applications in AJAX, mobile web applications)Node.js has ability to process many requests with low response times needed. It is also able to share things like validations between client and server side, which makes it a good choice for modern web applications doing a lot of processing on client side.
- Real time web applications:Anything that requires real-time feedback from web server such as chat application, messaging applications or other collaboration tools is good with Node.js. It will be the best technology for this type of job. Ruby and Python can do these kind of features however Node.js will do it exceptionally great in terms of performance and simplicity of development.
- Streaming Data:In case your plan is to build streaming applications then Node.js is what you need. Traditional web technologies frequently treat http requests and responses as atomic events. However, they are streams and not events. And consequently many great Node.js applications can be built to take advantage of this fact.
- Building APIs:Mobile applications can benefit most out of it because they consume data mostly via web services in form of JSON APIs. It’s as well perfect for taking care of many requests that are I/O driven (e.g. operations on database) and scales nicely.
When not to use Node.js:
- Heavy CPU utilizing applications:It’s not good using Node.js for applications that are very heavy on CPU usage and very light on actual I/O. Node.js permits to easily write C++ add-ons, so you could certainly use it as a scripting engine on top of your algorithms.
- Enterprise applications:If you’d like to build an enterprise application which requires complex operations, it’s better to stick to proven technologies like JAVA, Python. Node.js still has a long way to go and is considered to be rather young technology and yet to prove itself.
- Simple CRUD/HTML apps:While Node.js will eventually be a tool for writing all kinds of web applications, however your application won’t mystically get more traffic just because you write it in Node.js. If large part of your application is basically rendering HTML based on some database, using Node.js will not provide a lot of business benefits yet.
Some suppose that Node.js has a big future ahead and its popularity will be rising. Do you agree with this? Which future do you predict for it? I’ll be glad to hear your thoughts in the comments below 🙂

Yuliya Tolkach
Business Development Manager