Node.js vs PHP, is a lot like Batman vs Superman: both have different superpowers, both are entangled in a never-ending battle and most important of all, their fan base comprises of nerds like us!
Being PHP focused nerds since inception, we stumbled across Node.js when we were tasked with an exciting startup’s project back in December 2012.
This was a resource intensive project where we were tasked to develop an online web application that allowed users to customize Tuxedos with the help of Fashion Designers available live via videochat.
We knew this was going to be a resource intensive project and we originally wanted to use Laravel (a PHP based framework) to develop it. However, seeing the timeline that client wanted this to be delivered in, we finally settled for Node.js.
This was 4 years ago & since then there had been no looking back.
This blogpost, that I am writing today is a result of a thorough three pronged analysis of following parameters –
So Let’s Get Started!
Is PHP the Justin Bieber of Web Development?
If PHP was a human being, it would’ve been Justin Bieber – Loved by Beliebers and ubiquitously hated by the non-Beliebers.
It is the one of the most popular server-side scripting language among the web developers.
According to a survey done by W3tech.com, PHP is used by 82.3% of all the websites.
The years of lifecycle that PHP has underwent has resulted in making PHP scene a very overcrowded one.
PHP has had a lot of adapters and the number of developers who start off their career learning it is mind boggling. This popularity of PHP has resulted in release of several popular CMS solutions like WordPress, Joomla, Drupal, Magneto, Moodle, PHPBB, and many more. The list goes on and on.
However, its a fact that working with PHP on complex project has often got us thinking if it was designed by someone who understands the importance of keeping redundancy out of programming architecture.
Some would even say that it’s a crime to call PHP designed :-
• PHP is full of surprises: mysql_real_escape_string, E_ALL
• PHP is inconsistent: strpos, str_rot13
• PHP requires boilerplate: error-checking around C API calls, ===
• PHP is flaky: ==, foreach ($foo as &$bar)
• PHP is opaque: no stack traces by default or for fatal, complex error reporting.
But, PHP Is still flourishing and its devotees love it…
Recently, we wrote an article about how a Tweet from a developer moved PHP community so much so that a new implementation was developed within no time to help him.
Another factor that has led to the rise of PHP is that it can be easily hosted on a shared server, which means that PHP can be deployed easily on a shared server without burning a hole in the client’s pocket.
This is just perfect for someone who is looking to keep operations cost very slim at the risk of compromising with the performance of code to an extent.
So as long as there are clients that are just looking to get the work done on a limited budget, developers who want to earn quick cash while saving time, and people who want to learn web development as a hobby, PHP is gonna flourish!
And Node.js Walks In..
Weighing Nodejs vs PHP, Pragmatically:
Imagine you are an owner of a famous Gourmet bakery. Your Bakery is talk of the town because of your delicious gourmet cakes. You hire two employees:
– One bakes the delicious cake
– and other garnishes and decorates it.
Everything is going perfectly for you, but you want just one thing……
A single employee who could bake as well as garnish and decorate the cake. Because it’s a pain for you to first explain to one employee what all ingredients he should use while baking the cake and then explicitly explain to the other fella about garnishing.
We face similar challenges in web development while creating an app or a website, where we have to explicitly explain the functionalities to our front-end and back-end developers i.e. the flavor of the cake, and then we have to coordinate the workings of both our developers.
2) Node.js is 10X faster than PHP:
Moreover, Node.js uses event loop to process I/O operations asynchronously. It means that multiple I/O operations do not block each other. Think of a non-blocking server as a loop, that goes round and round. When a request comes in, the loop grabs it, then throws it to some other process(like data query), sets a callback and keeps on going round and round waiting for other requests to arrive.
If a call back comes, it again grabs it and throws it to the desired client and keeps looping around. So it doesn’t waste any time and can accept any number of request in a given time without waiting.
It means that you can read files, query the database, and send mails, etc. at the same time. Therefore, most common tasks execute in your Web App way faster.
On the other hand, PHP is synchronous, i.e. if one I/O operation is getting processed, other I/O operations will have to wait till it gets processed. Although this problem can be solved using ReactPHP, but Node.js is still better than it by a mile!
ReactPHP vs Node.js Benchmarking, read this article to compare the asynchronous working result.
3) Node.js is a boon for building highly scalable Web App:
The most common tasks in a web app involves: reading and writing to network connections, reading/writing to the filesystem, and reading/writing to the database. All these tasks are performed extremely quickly in Node.js(as mentioned above), which makes it perfect for creating a highly scalable Web App capable of handling a great amount of work.
Although Node.js is single threaded by default, but by using the new cluster module it can be also scaled horizontally across multiple threads.
One more thing that affects scalability is our database needs. For example: Using MySQL with Node.js will not be as effective as using MongoDB with Node.js, because both of them are having event-driven nature.
4) Node.js excels at Real-time applications:
Let’s have a brief overview on how a client-server and web browser communicate. In most of the languages, communications are initiated by the client browser and the web server responds to its requests.
In a real-time web application, client’s browser constantly sends a constant stream of requests to the web server (also called polling) for updates, and if the updates are available, the web server responds and sends the information back to the client.
So this means that these applications are “near” real time but not actually real time in nature because they depend on the frequency of requests. If a lot of requests are generated, the web server has to significantly increase the resources to handle those requests.
Here is where Node.js gains an upper edge. Node.js has a package called Socket.io that provides Web Sockets functionality. This functionality removes the concept of polling, as now the server can directly push information to the clients.
Therefore, Node.js is perfect for real-time web applications like chat application and games because of its event-driven architecture. Its event loop takes care of multi-user requirement.
5) Data streaming gets easier:
We already know that Node.js is exceptionally good at handling I/O operations. Node.js handles the read/write stream of web sockets in a similar way. Thereby making Data streaming easily.
What type of Websites or Web Apps can be built using Node.js?
• Node.js is good for Real-time Web Apps:
While working on a customer support chat application for our Tuxedo Startup client, client came to us and told us that he wanted to scale up the application.
We were asked to develop a customer support text chat application which allows users to order custom Tuxedoes and then interact with the tuxedo designers for further customizations. Some of their designers even operated from Europe.
Since Node.js was the original choice , using Socket.io package seemed like the most sanest thing to do.
Result was an application which utilized very little server resources and superfast data exchanges with little performance overhead.
• Node.js works well with Data Streaming:
When our NYC-based Ecommerce Enterprise client asked us to add the video conferencing feature in the application, we were more than thrilled about it.
As the Tuxedo website grew in its audience and popularity. There were a greater number of users who were complaining about a lack of human touch while making their purchases.
So the client asked us to add a video conferencing feature on the Website.
We were more than thrilled to scale up the website as we knew that Node.js is great for data streaming apps because it consumes and process data on the fly, i.e. we don’t need to wait until the end of the upload process.
Using Node.js to stream video chat content for each designer seemed like a summer breeze.
Also, Node.js’ performance as well as the buildup time for such a heavyweight app is far more superior to any custom coded PHP video conferencing solution.
• E-commerce websites: Giants like Walmart And E-bay are using Node.js too.
The Future of Node.js:
Many people are skeptic about Node.js future, and why shouldn’t they be after what happened with Facebook’s cloud app platform Parse! On 28 January 2016, Facebook announced that it will close down Parse, with services effectively shutting down on 28 January 2017.
Many developers openly critiqued Facebook’s decision of shutting down their services for Parse. So now people are acting more cautiously when it comes to using new technologies. Let us look at the factors that predict the future of any language:
1) Size of the community and how do they collaborate:
Initially, when Node.js was released in 2009, it was a risky platform to use, but it was undeniable that it was pretty cool. But cool is not enough to adopt a new technology in Business.
In 2011, Node Packet Manager was created, which allowed developers to share their efforts with one other. This lead to the rise in popularity of Node.js, and when something gets popular, it becomes slightly less risky!
2) How often do releases occur and what licensing does it operate under?
Releases occur frequently in Node.js and it is an open source platform where users can share their efforts through NPM. Node.js is released under the MIT license.
3) Are Commercial Entities backing Node.js?
Many Big names have adopted Node.js as a key technology for growing their business. Businesses like: Netflix, PayPal, Walmart, Microsoft, IBM and even Yahoo have embraced Node.js for moving forward. So now the risk has been totally minimalized as Node.js is getting the backing of big guns like IBM and Microsoft in IT industry who themselves are into creating programming languages!
Moreover, Node.js has completely revolutionized the retail space. Retailers have been implementing it at many levels. Let’s take a closer look why this is happening.
There are 2 main reasons for this: Distributed devices and Growth in Mobile Sales.
The rise in popularity of Node.js among Retailers is due to the fact that data intensive apps can be built using Node.js which can run in real time across a spectrum of devices. Also, it performs exceptionally well when it comes to high traffic applications, in comparison to other traditional languages.
Growth in Mobile Sales has also lead to the rise in popularity of Node.js among retailers. Earlier users used to browse products from their mobile, but preferred ordering from their desktops and laptops. But the scenario has changed drastically now, and more and more users are now buying products using their Smartphones. So now the retailers are moving toward Node.js because of its ability to handle many connections at the same time, thereby reducing costs.
To Sum It Up…
Being stubborn about a particular platform is not a luxury that most successful web development agencies can indulge themselves in.
While PHP is a legacy programming language that promises budgeted solutions that can easily be deployed with slimmest server sepcs. Node.js promises cost cutting software lifecycles that can be scaled without spending fortunes.
If you are considering building an application that requires working with APIs or depends on several underlying parallel services – Node.js is a powerful horse that you can bet on with closed eyes.