Wednesday, April 29, 2015

What are the benefits of Node.js?

What is Node.js?

Ryan Dahl, and other developers, at Joyent created Node.js.  Node.js is an open source, cross-platform runtime environment for server-side and networking applications. It brings event-driven programming to web servers enabling development of fast web servers in Javascript.

In an event-driven application, there is a main loop that listens for events, and then triggers a callback function when one of those events is detected.  Node.js also provides a non-blocking I/O API that optimizes an application's throughput and scalability.   In a non-blocking language, commands execute in parallel, and use callbacks to signal completion.  In a blocking language, commands execute only after the previous command has completed.

Node.js uses the Google V8 JavaScript engine to execute code, and a large percentage of the basic modules are written in JavaScript. Node.js contains a built-in library to allow applications to act as a Web server without software such as Apache HTTP Server or IIS.

NPM is the pre-installed package manager for the Node.js server platform. It is used to install Node.js programs from the npm registry.  The package manager allows publishing and sharing of open-source Node.js libraries by the community, and simplifies installation, updating and un-installation of libraries.

What are some of the Benefits of Node.js?

1. Asynchronous I/O
It's built to handle asynchronous I/O from the ground up and is a good match to a lot of common web- and network-development problems.  In addition to fast JavaScript execution, the real magic behind Node.js is called the Event Loop. To scale to large volumes of clients, all I/O intensive operations in Node.js are performed asynchronously.

2. Javascript
Node.js is Javascript.  So the same language can be used on the backend and frontend.   This means it breaks down the boundaries between front- and back-end development.
3. Community Driven
In addition to it’s innate capabilities, Node.js has a thriving open source community which has produced many excellent modules to add additional capabilities to Node.js applications. One of the most famous is, a module to manage persistent connections between client and server, enabling the server to push real-time updates to clients. abstracts the technology used to maintain these connections away from the developer, automatically using the best technology available for a particular client (websockets if the browser supports it, JSONP or Ajax longpolling if not).