Ruby on Rails vs Node.js

Ruby on Rails or Node.js: what to choose to create a web application?
18 July 2017   3470
Ruby on Rails

Framework, written on Ruby programming language.

Compare Node.js and Ruby on Rails "face to face" will not work. Ruby on Rails is a framework, and what is Node js? This is a software platform that serves as the environment for executing JavaScript code. However, if we consider both solutions as a set of capabilities and tools that they can provide to the developer to create a full-fledged product, then we can draw some analogies. It is in this vein that we will compare these platforms in the article. You can have more info about Ruby on Rails at this article.

Ruby on Rails code example
Ruby on Rails code example

So, let compare Ruby on Rails vs Node.js.

Accessibility for beginners

Node.js can be learned more quickly, because It uses JavaScript. And this language is known for its rather low entry threshold. In addition, frontend developers face JS more often. Therefore, many developers can already have a base to begin learning the basics of Node.

A programmer who has learned Ruby "in passing" on a level sufficient for mastering Rails is a rarity. Usually, if someone writes in this language, he studies it purposefully. Ruby, though it has built-in useful methods for dates, strings, arrays and other elements, can still scare away with more complex syntax.

Performance

The V8 engine running Node.js shows excellent speed results. Ruby is a slow language, and Rails does nothing to increase productivity, inheriting all the problems of the parent. When developing a small application, it is most likely not affected.

Node.jsNode.js

But as soon as there is a certain load on the project, the speed of Node.js will become noticeable. Its non-blocking architecture, built on the use of callback, performs well under concurrency when it is necessary to handle a lot of I / O operations.

Libraries

For more than ten years, Ruby on Rails framework has managed to develop almost all necessary plug-ins and extensions, which not only simplify the work, but also guarantee the absence of problems with their use. For such a long time, all the critical errors and imperfections of the functional have long been found and corrected.

Node.js is actively developing, and therefore not all libraries and additions have taken their final form and often conflict with each other. Yes, they can be easily installed with the help of a convenient NPM package manager, but, unfortunately, he does not insure against errors.
Using JavaScript frameworks like Sails.js or Kraken.js does not help much. Although they are trying to conceptually resemble Rails, they still lack the magic and gems of this framework.

Other features

  • Node.js is an asynchronous platform, which provides an excellent query processing speed. However, this same feature complicates the debugging of JavaScript code. Ruby is a classic multithreaded language, and it lacks this disadvantage.
  • Rails immediately uses MVC and offers a set of necessary functions for development. Pure Node.js does not have these advantages, the use of Express.js even though it makes it possible to use the "model-controller-view" model, still does not allow to achieve RoR flexibility. On the other hand, the way to solve a problem in Ruby on Rails is not always obvious and is hidden behind the abundance of gems and magic. Node.js will show exactly what you wrote, with a minimum of distortion.

Technical documentation and community

JavaScript is one of the most fashionable languages ​​of recent years. Therefore Node.js can be found in very different projects: web applications, messaging systems, CRM-systems, sometimes even on usual sites. Thanks to this, a large circle of developers actively engaged in the development of the language has formed around it. To the platform itself is excellent documentation, but the comments and details of the use of some not very popular libraries may not be enough.

Ruby - this is a fairly long-established community. Rails is the most popular framework for this language, so it's easy to find information on it. In addition, RoR has a detailed technical background, and gems are usually accompanied by detailed developer and community comments.

Final comparison of Ruby on Rails and Node.js

Node.js Ruby on Rails
Development platform Framework
Easy-to learn, based on popular JavaScript  More complicated syntax and the needs to learn from the scratch
High performance Lower performance
Big selection of libraries, but not all of them are equally reliable and compatible Many ready-made add-ons with detailed descriptions and comments
Using an asynchronous programming language Using a multithreaded programming language
Detailed documentartion on Node.js itself, but less detailed about add-ons Formed community and documentation around the framework and add-ons to it.

What technology do you like more?

Node.js and Ruby on Rails are popular programming best on JavaScript and Ruby. Each of them has strong and weak sides. In your opinion, what technology is more perspective and interesting? Maybe, you have a real-work experience with one or both of them? Please, share your opinion!

Ruby on Rails
54% (25 votes)
Node.js
46% (21 votes)
Total votes: 46

Charles Nutter. How to move your Ruby project to JRuby and why

Charles Nutter works on JRuby and JVM language support at Red Hat.
03 October 2018   923

— How did you get into programming and into Ruby world?

— In 2004, I was working at a government contracting firm as a Java Enterprise Architect. I was in charge of a large mainframe conversion for the United States Department of Agriculture, which meant I spent a couple weeks a month in the Washington D.C. area. One of those trips coincided with RubyConf 2004, and since a close friend had been recommending I look at Ruby, I decided to attend. So there I was sitting in a Ruby conference without ever having learned Ruby...and I understood every piece of code, every example. I was amazed and vowed to find a way to bring Ruby into my Java world.

— Which projects are you working on now?

— My primary role is as co-lead of JRuby. This also means supporting several side projects like our native-library backend (Ruby's FFI library is maintained by us using this backend on JRuby) and our String encoding subsystem (an elaborate port of the logic from CRuby). I also do much of the outreach to the community and try to make sure our users are getting their issues addressed. There's always plenty to work on!

— Which one would have the biggest general impact from you opinion?

— I like to think that JRuby, while not the most popular JVM language, has at least helped to change the JVM platform. Because of our collaborations with Sun Microsystems, Oracle, and others, we have solid dynamic language support at the JVM level along with many other projects to support alternative languages. The JVM today is a much more hospitable home for non-Java languages than it used to be, and I hope we've played some small part in that change.

— Which languages are you writing on in your everyday life? Which one do you like most? Why?

— Most days I write in a mix of Ruby and Java, since JRuby is implemented using both. I like both languages for different tasks. Ruby is a better language for building applications that need to evolve and adapt quickly. Java is a great language for writing high-speed, reliable libraries and services. JRuby gives you the best of both worlds!

— Do you like to program in Java?

— I do, especially with all the language improvements that have been added recently, like lambdas (closures or blocks in Ruby) and the new "var" syntax for declaring local variables when the static type is unambiguous.

— What do you think about Rust?

— Rust is a great language! I did a lot of C++ development in my college years, and I can tell you right now if I'd had Rust available then I would have used it. I'm especially jealous of the static-typed ownership model, which helps avoid thread-safety issues like races and data corruption. I hope to see other languages adopt this pattern in the future.

— What do you think about the Ruby language perspective? Is it or its community dying?

— After all these years working on JRuby, I do still love Ruby syntax and the Ruby way of doing things. However I worry that the language is held back too much by limitations of its primary runtime. JRuby has been fighting to make true parallel threading a reality for Ruby developers, but still today the vast majority of Ruby services are run using multiple isolated processes, wasting tremendous amounts of CPU and memory resources. I believe this is due to the C API for writing Ruby extensions being so large and so invasive...it prevents many improvements -- including parallel threading -- from being developed. Hopefully we'll see this change some day.

— Which upcoming or not well-known features of Ruby language would rush in future?

— I look forward to strings becoming immutable-by-default, as they are in most other languages. Parallel programming would be much simpler if more of Ruby's objects supported pure-immutable or "deep freeze" semantics. It's a bit like the Rust ownership model...if you're going to be sharing an object across threads, choose the version of that object that you know can't be modified anymore. This extends to arrays, hashes, and just about every other mutable object in Ruby: we need to make it easier to lock down mutable data.

— Could you give me an advice on how to move my ancient monolithic project to JRuby? And should I?

— The first question really is whether such a move would benefit you. There's many good reasons to consider a move to JRuby:

  • Reducing CPU  and memory costs in a shared hosting environment by utilizing JRuby's true parallel threading
  • Deploying a Ruby application into a JVM-heavy environment, such as used by larger financial or government organizations
  • Needing access to libraries that only exist on the JVM, or that are more portable or scalable on the JVM than their Ruby or C equivalents
  • Getting a little performance boost out of CPU-heavy or concurrency-heavy applications.

— I would say if your application is scaling well and not costing you too much today, perhaps you don't need to make a move. But if you decide you need more out of Ruby, here's the process for migrating:

  • Do a clean bundle of your application, paying special attention to C extensions you may be using. You can also do this bundling *on* JRuby, and then deal with missing or unsupported libraries one by one.
  • For each extension, search for a JRuby equivalent. We have some pages on the JRuby wiki to help with this. Most popular libraries have JRuby versions. If no JRuby version exists, you may look for a pure-Ruby version (it might be fast enough on JRuby) or a JVM library (in Java or Scala or Clojure or whatever) that could be used as a replacement.
  • Once your bundle completes, you should have a working JRuby application! We've worked very hard on compatibility, and try to be responsive if users find new issues, but a successfully-bundled application is expected to work.

The steps beyond this involve deciding how to take advantage of your newfound power: how many threads to throw at a given server, what you're going to do with all the money you're saving, etc.

— What should nowadays students learn to become good programmers?

— When I was at university, my earliest computer science courses used the Scheme language, a Lisp-like functional language that's great for teaching the fundamentals of programming. I still recommend that serious new programmers work through at least some of the Structure and Interpretation of Computer Programs book from MIT. Beyond that, I'd say learn as many different and unusual languages as you can; they'll all give you new ideas and new ways to look at programming problems.

— How do you keep yourself motivated for programming? Have you ever been "burned-out"?

— Burn-out is a real problem in our industry, and working in open source brings with it huge amount of stress. We've all felt that way sometimes...too much work to do and not enough time to do it, missing out on time with family and friends, ignoring our own health so we can fix one more bug. These days I try to center myself by keeping up with hobbies: playing video and board games, learning to play guitar, studying foreign languages, and traveling around the world to meet new friends. There's always this nagging workaholic telling me to get back on the job, but I'm learning how to maintain the right balance.

— What do you think about Russia and what do you expect of the upcoming RubyRussia event?

— I love Russia, and my speaking trips the past few years have been some of the most rewarding of my life. This will be my fourth visit, having been to Saint-Petersburg, Moscow, and Novosibirsk (!!!) previously. I'm looking forward to returning to Moscow and meeting the RubyRussia community I've heard so much about!

Questions by Dmitry Matveyev PM at Evrone https://www.facebook.com/matveyev.d