Node.js, Ruby or PHP: Which tech stack should you use?

 

Node.js, Ruby on Rails and PHP are pretty close in terms of popularity and can achieve similar results. Are you wondering which would be best suited for your next project? Read on as we weigh the pros and cons…

 

Untitled Banner (1)

 

PHP and Ruby have been around for a long time while Node.js is relatively younger and has caught the fancy of tech industry for its scalability. Here we attempt to differentiate the three platforms, although it is suggested that architects or enterprises choose a platform that is best suited to requirement at hand.

 

Different Languages

When we compare these three languages they may not be as different as apples and oranges given the fact they all are scripting languages used for web application development. To start with PHP you can make out much of how it evolved from its initial acronym “Personal Home Page” with set of CGI binaries to Hypertext Pre-processor with a with a hypertext parser. As for Ruby it is an object oriented scripting language it became so hugely popular because of its web framework Ruby on Rails (RoR) which made the web development rapid. Similar is the story of JavaScript, the google V8 engine and Node.js. But the real difference is that Node.js made it possible to use JavaScript on both the client and server side with the help of V8 engine. Whereas Rails is a web application framework written in Ruby but on the client side it is still JavaScript. In all the above gained attention because they made difference to the web application at the time of their evolution. PHP made a difference by optimizing the user interaction when the web was having growth pains. Then came Ruby with Ruby on Rails (RoR) to address the speed of development when the IT world was moving at its fastest in adopting the web technologies which lead to the resource crunch and projects were getting delayed. At a time when smart phones lead to problems of scalability and SLAs, Node.js compensated it with its ability to scale due to its event based architecture, Concurrency and non-blocking IO and most importantly abundantly available JavaScript resources to back it. Though Ruby promises concurrency it is not inherently concurrent.

On the other hand Node.JS is just a JavaScript so it is the same language on the front end and the back. It has large pool of available JavaScript developers and has a thriving and active community with large database of free packages. Unlike Ruby, Node.js is more concise and comes packed with a number of useful built-in functions, JavaScript can accomplish all these as well, as long as you get yourself accustomed to the custom prototyped methods. Whereas Ruby on Rails is a web framework made up of amalgamation of different technologies but it still uses JavaScript on the front end. Same with PHP where it falls back on JavaScript to implement most of the AJAX calls to backend.

 

Building Of Web Applications

This is where Node.js excels because it is concurrent making it non-blocking I/O which means no server hangs.  This makes a huge difference to web applications especially in this current world of smartphones, one metric is a web application developed with any other language on a server of 4GB RAM can start having issues on reaching 4000 connections but with node.js it can server over a million connections. Also, with Ruby you will be left to struggle with SQL, Ruby and JavaScript. Developers enjoy using Node.js because your frontend developers can also be involved on backend, this can add great productivity to a team. Similarly the code can be moved from frontend to backend and vice-versa as per the needs.

Ruby on Rails offers a generous ecosystem with models to views, controllers, to data object models, particularly clear and concise interactions. The same is possible with Node.js as well, but it will require heavy module interaction and helpers. Moreover, in RoR, you need not worry about data models. These integrations however do come with a downside. When something goes wrong, it’s a lot more difficult to drill down to the actual cause, because Rails reads into specific variable names. On the other hand if you are using Node.js, what you see is what you get, with hardly any interpolation.

Weather it is PHP or Ruby On Rails they cannot compete with Node.js on scalability and uptime.

 

Development Tools

Node.js wins hands on here thanks to npm (Node Package Manager). Npm is easy to install and relatively easy to use. It allows you to select between global and local installation of the packages. In languages such as Ruby, it’s standard for your gems to be installed along with your Ruby version. The tooling is also fantastic. The good bit is that npm v3 is also out in beta. There is catch however to be a good Node.JS programmer, i.e. one needs to be aware of the JavaScript engine internals to leverage the performance the node.js has to offer and to go with it there aren’t tools to measure the same as on today.

 

Environment

 If we talk about enterprise applications they either require very high memory or multi-threading of JVM. However with JVM the programmer can leverage the threading on modern hardware the multicore. In comparison Node.js runs as a single thread using only one core even in a multi core server. But it can be clustered using its ‘Cluster’ module to leverage all the cores where in all the server processes sharing the same port can be forked into multiple processes. As for RoR it was primarily designed for programmer productivity as against the machine efficiency.

The choice of using either of them purely depends on the speed of development where again finding a “Primadona” of developer in RoR is way too tough than finding a great JavaScript resource and hence the speed of development in Node.js is faster than RoR.

Most important point however is that Node.js is server-side JavaScript environment not a ‘server’ per se. Out of the box, Node.js contains listeners for HTTP, but it does not contain a real server. It’s on the programmers to write a server on their own or use Node Package Manager (npm) the command-line tool that comes bundled with Node.js to fetch the server. Everything else in Node.js works the same way. The minimalistic API provided by Node.js provides all the tools to build just about anything thanks to huge community contributions it enjoys.

On the other hand RoR which has a simple Ruby web server that is distributed with Ruby, and Rake, a build system, distributed as a gem. Together with Ruby on Rails, these tools provide a basic development environment. These gems help assist in adding the certain functions to the web app developed with the help of Ruby on Rails.

One noticeable aspect of Node.js is that apart from being concurrent it only takes few milliseconds for the Node.js based application to boot up and serve in an eventuality of a server crash whereas it may take 20-90 mins for a server based on any other stack.

 

Development Environments

All the said applications have the IDEs like sublime, Eclipse, Jetbrain or any test editors. All the environments for these languages are equally simple to setup and start development.

 

Integration

Here, PHP has an advantage of being around for a long time giving it more options. But it should also be noted that there are severely outdated integrations like MySQL extension — which has only recently been eliminated in PHP7.

One of Node’s biggest advantages is JSON. JSON is one of the most vital data exchange format available on the web. It is best studied for a JavaScript program; this implies that when using Node, data flows seamlessly between layers without any requirement for reformatting.

ROR has an excellent automated testing suit to go with and consists of inbuilt testing system, which reduces the requirement of manual testing. Rails creates a test folder for you as soon as you create a Rails project and has a specific folder for integration testing.

 

Hosting and Deployment

ROR and PHP has an edge here because of its maturity while Node.js being a new spin off of JavaScript with an ability to work on client and server side has a lot to catch up on. To host and deploy Node as a service requires a good understanding of its whole eco-system within which it operates. This may involve a lot more set up as well as command line access and this can put off beginners unlike RoR or PHP where it is just a matter of configuration.

 

What’s best for High Traffic web applications?

Node.js seems perfect for any high traffic usually RESTful web application given its concurrency and non-blocking I/O. Asynchronous communication with database is a huge advantage if you are using node.js. In a RoR application when a user hits a database all other users need to wait until that request has finished, which is why it is known for being slow. In Node.js that request would be asynchronous, other users would be unaffected and the user with a big database request would wait for the event loop to finish. This can lead to a SLA nightmare.

 

Performance

PHP is in process of getting a multi thread built-in server. This will enable it to dodge an external server entirely. High-performance, low latency applications are terms that are now synonymous with Node.js. The non-blocking I/O mechanism combined with Google Chrome V8 engine technology, has enabled node.js to become fast and scalable. However as mentioned above Node.js application uses a single core even in multicore servers which can be overcome by using ‘Cluster’ package.

 

Our Verdict

There is room for all three to succeed but what makes Node.js standout is its event based architecture which by all means is going to overtake the other two. PHP has over the years become vulnerable to security threats like SQL injections and there is also lack of centralized packaging registry. Issues also occur due to the inconsistent API and below average performance.  The better alternatives are Ruby on Rails if you want a faster development and Node.js if you want higher performance. Although Node.js is comparatively a younger technology but as Node matures, more help will be available easily thanks to thriving community. Node.js has already found its foothold in code stacks of many Fortune 500 companies across the globe and there seems to be nothing stopping it now!

Ultimately, PHP and Ruby Rails developers may want to install Node.js at some point in the future, yet the reverse is not probable, given that PHP and RoR still depend a lot on JavaScript for their front end.

 

To know more about  Node.js  and to find out how it can help your enterprise improve business efficiency contact Avenir IT. You can email at info@avenirbs.co.uk or call on +44(0) 20 8596 5007. Avenir IT provides Node.js consultation, implementation and also resources to clients for short term as well as long term projects.

 

 

 

 

 

 

 

 

 

 

 

Koteswara Rao

Technical Delivery manager at Avenir IT
Koteswara Rao Muntha comes with varied experience as system architect for highly scalable systems. In his current role as Technical Delivery manager, he heads the delivery team at Avenir IT for a hybrid cloud solution of an asset management product.

Latest posts by Koteswara Rao (see all)

Leave a Reply

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