NEWS

May 17 2018

Why do people say that Ruby is slow? Stack Overflow

#ruby #performance #testing


#

I like Ruby on Rails and I use it for all my web development projects. A few years ago there was a lot of talk about Rails being a memory hog and about how it didn’t scale very well but these suggestions were put to bed by Gregg Pollack here .

Lately though, I’ve been hearing people saying that Ruby itself is slow.

  • Why is Ruby considered slow?

I do not find Ruby to be slow but then again, I’m just using it to make simple CRUD apps and company blogs. What sort of projects would I need to be doing before I find Ruby becoming slow? Or is this slowness just something that affects all programming languages?

What are your options as a Ruby programmer if you want to deal with this “slowness”?

Which version of Ruby would best suit an application like Stack Overflow where speed is critical and traffic is intense?

The questions are subjective, and I realise that architectural setup (EC2 vs standalone servers etc) makes a big difference but I’d like to hear what people think about Ruby being slow.

Finally, I can’t find much news on Ruby 2.0 – I take it we’re a good few years away from that then?

closed as too broad by Carpetsmoker. Wayne Conrad. Raphael Miedl. Alfred Myers. Christian Gollhardt May 25 ’15 at 22:35

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center. please edit the question.

14 Answers

Why is Ruby considered slow?

Because if you run typical benchmarks between Ruby and other languages, Ruby loses.

I do not find Ruby to be slow but then again, I’m just using it to make simple CRUD apps and company blogs. What sort of projects would I need to be doing before I find Ruby becoming slow? Or is this slowness just something that affects all programming languages?

Ruby probably wouldn’t serve you well in writing a real-time digital signal processing application, or any kind of real-time control system. Ruby (with today’s VMs) would probably choke on a resource-constrained computer such as smartphones.

Remember that a lot of the processing on your web applications is actually done by software developed in C. e.g. Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, many parsing libraries, RMagick, TCP/IP, etc are C programs used by Ruby. Ruby provides the glue and the business logic.

What are your options as a Ruby programmer if you want to deal with this “slowness”?

Switch to a faster language. But that carries a cost. It is a cost that may be worth it. But for most web applications, language choice is not a relevant factor because there is just not enough traffic justify using a faster language that costs much more to develop for.

Which version of Ruby would best suit an application like Stack Overflow where speed is critical and traffic is intense?

Other folks have answered this – JRuby, IronRuby, REE will make the Ruby part of your application run faster on platforms that can afford the VMs. And since it is often not Ruby that causes slowness, but your computer system architecture and application architecture, you can do stuff like database replication, multiple application servers, loadbalancing with reverse proxies, HTTP caching, memcache, Ajax, client-side caching, etc. None of this stuff is Ruby.

Finally, I can’t find much news on Ruby 2.0 – I take it we’re a good few years away from that then?

Most folks are waiting for Ruby 1.9.1. I myself am waiting for Rails 3.1 on Ruby 1.9.1 on JRuby.

Finally, please remember that a lot of developers choose Ruby because it makes programming a more joyful experience compared to other languages, and because Ruby with Rails enables skilled web developers to develop applications very quickly.

Why is Ruby considered slow?

Depends on whom you ask. You could be told that:

  • Ruby is an interpreted language and interpreted languages will tend to be slower than compiled ones
  • Ruby uses garbage collection (though C#, which also uses garbage collection, comes out two orders of magnitude ahead of Ruby, Python, PHP etc. in the more algorithmic, less memory-allocation-intensive benchmarks above)
  • Ruby method calls are slow (although, because of duck typing, they are arguably faster than in strongly typed interpreted languages)
  • Ruby (with the exception of JRuby) does not support true multithreading
  • etc.

But, then again, slow with respect to what? Ruby 1.9 is about as fast as Python and PHP (within a 3x performance factor) when compared to C (which can be up to 300x faster), so the above (with the exception of threading considerations, should your application heavily depend on this aspect) are largely academic.

What are your options as a Ruby programmer if you want to deal with this “slowness”?

Write for scalability and throw more hardware at it (e.g. memory)

Which version of Ruby would best suit an application like Stack Overflow where speed is critical and traffic is intense?

Well, REE (combined with Passenger ) would be a very good candidate.

Here’s what the creator of Rails, David Heinemeier Hansson has to say:

Rails [Ruby] is for the vast majority of web applications Fast Enough. We got sites doing millions of dynamic page views per day. If you end up being with the Yahoo or Amazon front page, it’s unlikely that an off-the-shelve framework in ANY language will do you much good. You’ll probably have to roll your own. But sure, I’d like free CPU cycles too. I just happen to care much more about free developer cycles and am willing to trade the former for the latter.

i.e. throwing more hardware or machines at the problem is cheaper than hiring more developers and using a faster, but harder to maintain language. After all, few people write web applications in C.

Ruby 1.9 is a vast improvement over 1.8. The biggest problems with Ruby 1.8 are its interpreted nature (no bytecode, no compilation) and that method calls, one of the most common operations in Ruby, are particularly slow.

It doesn’t help that pretty much everything is a method lookup in Ruby – adding two numbers, indexing an array. Where other languages expose hacks (Python’s __add__ method, Perl’s overload.pm) Ruby does pure OO in all cases, and this can hurt performance if the compiler/interpreter is not clever enough.

If I were writing a popular web application in Ruby, my focus would be on caching. Caching a page reduces the processing time for that page to zero, whatever language you are using. For web applications, database overhead and other I/O begins to matter a lot more than the speed of the language, so I would focus on optimising that.

My record thus far is saving a company $30,000 / year in one days work. Their engineers decided it was more readable to have a cloud computing algorithm count the number of tasks done on each iteration, causing n! queries on jobs with 20,000+ units of work. Changing that to check if 1 work item was left dropped it to n queries, and cut the bill from $130/day to $20/day. Lazy coders make me money. Please do encourage more lazy coders. Ajax May 23 ’13 at 20:00

It s funny you comment just now. I ve moved on to another company, where we have just had to pull fifteen developers off of features and onto performance since a large American bank refuses to sign a multi-million dollar contract until the system can handle their load. They like the features we have, just not the speed at which they perform. If you ignore performance long enough, it doesn t matter what features you have because they will be unusably slow. Ajax Mar 11 ’14 at 20:39

i am partially biases on this, maybe cox this is an outdated comment. now we have ruby 2.3, and from ruby 2.2 experience, i found that rails stack is heavy. if ones need a faster framework, try pidrano, its based on sinatra and they tried to do as close as possible to rails command, but much lighter. but they have not reached version 1.0 yet, still more to come, but from my test, it run nice and fast. I ve work it with active record 5 and pidrano sprockets, borrowed from rails. With 200 concurrent connection, I m getting 1.5s response without db query, with assets from sprockets James Tan Jun 1 ’16 at 4:09


Written by admin


Leave a Reply

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