Why we moved from NodeJS to RoR
Disclaimer: This post is in no way a rant about NodeJS or Ruby on Rails. It merely reflects on our decision and the reasoning behind it. Both the frameworks are great for the purpose they are built, and yes that is why a part of our stack is still running on NodeJS.
I am huge fan of NodeJs and I believe it’s a very exciting technology and we will see it getting more popular down the line. I greatly admire it but in spite of everything I recently ported Targeter App from NodeJS to Ruby on Rails.
NodeJS is suitable for apps that do plenty of short lived requests. It will work fine for a traditional CRUD app, but its not the ideal tool for it. PHP, Ruby, Python have frameworks that are well polished and mature for these apps. NodeJS’ async everything wont have any affect on a CRUD app. Popular frameworks, provide very good caching and everything that is needed for your app to work fine even synchronously.
NodeJS is a very young framework, and packages around it are very immature. I say this with no offence to any of the awesome contributors who have made so many great packages. However, most of the packages are still maturing, and the rapid development of NodeJS means a lot of changes in each new version; and when you use a cutting edge technology, you really should update to the latest version, ASAP. This makes for a lot of trouble for a startup.
Another reason was testing. The testing frameworks in NodeJS are good, but they are no match for what is available on platforms like Django, and RoR. For an app that sees tens of commits a day and all of them have to go live in a day or two, it is important to ensure that nothing breaks, or you will lose the early adopters you worked so hard to get. No one wants to spend a day while you fix trivial bugs.
Finally, we needed something that could cache everything and gets the work done ASAP. Even when our app grows and has thousands of hits per second, we are never going to experience a flood of requests; it is not a chat app! At best the main app will see a 1000 RPS, something that is a piece of cake with RoR and Nginx.
Now, if you are reading still, and you did “read” all this stuff, you pretty much are dying to ask where are we using NodeJS. Well, our app consists of 2 parts. The first is the interface the user sees, and the second that manages the reports, and the logging stuff. The latter is a perfect scenario for using NodeJS; a lot of short lived requests. This part of our app, ends the responses as early as possible, even if we are still pushing things around. This is important because while the request is open, the browsers are waiting for it to complete, damaging the user’s experience. NodeJS’ async everything saves us. The data is being written to the db, or being crunched, while the request is ending, and the browser can continue with the important stuff.
PS: Here is a great guide on where to use NodeJS and how to convince your boss to use it, http://nodeguide.com/convincing_the_boss.html .
14 Notes/ Hide
- fengclient reblogged this from targeterapp
- fengclient likes this
- y2rayk reblogged this from targeterapp
- technotalk reblogged this from targeterapp
- edham-arief likes this
- markprovan reblogged this from targeterapp
- y-bookmark reblogged this from targeterapp
- daftbeats reblogged this from targeterapp
- frankyurban likes this
- hiddenpowers likes this
- carloscastro reblogged this from targeterapp
- jonbaer reblogged this from targeterapp and added:
- svenduplic likes this
- madhukarah reblogged this from targeterapp
- termarks likes this
- oivoodoo likes this
- targeterapp posted this