为什么人们说Ruby比较慢?

我喜欢Ruby on Rails,并将其用于我的所有Web开发项目。 几年前,有很多人谈论Rails是一个内存pipe理者,关于它如何不能很好地扩展,但是这些build议被Gregg Pollack 放在这里 。

最近我听到有人说Ruby本身很慢。

  • 为什么Ruby认为慢?

我不觉得Ruby很慢,但是我只是用它来制作简单的CRUD应用程序和公司博客。 在我发现Ruby变慢之前,我需要做什么types的项目? 或者,这种缓慢只是影响所有编程语言的东西?

  • 如果你想处理这种“缓慢”,你有什么select作为Ruby程序员?

  • 哪个版本的Ruby最适合像Stack Overflow那样的速度至关重要且stream量很大的应用?

这些问题是主观的,我意识到架构设置(EC2 vs独立服务器等)会产生很大的差异,但是我想听听人们对Ruby缓慢的看法。

最后,在Ruby 2.0上我找不到太多的消息 – 我认为我们距离那么好几年了?

为什么Ruby认为慢?

因为如果你在Ruby和其他语言之间运行典型的基准testing,Ruby会丢失。

我不觉得Ruby很慢,但是我只是用它来制作简单的CRUD应用程序和公司博客。 在我发现Ruby变慢之前,我需要做什么types的项目? 或者,这种缓慢只是影响所有编程语言的东西?

Ruby可能不会为编写实时数字信号处理应用程序或任何types的实时控制系统服务。 Ruby(与今天的虚拟机)可能会窒息资源受限的计算机,如智能手机。

请记住,您的Web应用程序中的很多处理实际上是用C开发的软件完成的,例如Apache,Thin,Nginx,SQLite,MySQL,PostgreSQL,许多parsing库,RMagick,TCP / IP等都是Ruby使用的C程序。 Ruby提供了粘合和业务逻辑。

如果你想处理这种“缓慢”,你有什么select作为Ruby程序员?

切换到更快的语言。 但是,这是一个成本。 这是值得的。 但是对于大多数Web应用程序来说,语言的select并不是一个相关的因素,因为没有足够的stream量来使用更快的开发语言。

哪个版本的Ruby最适合像Stack Overflow那样的速度至关重要且stream量很大的应用?

其他人已经回答了这个问题–JRuby,IronRuby,REE将使你的应用程序的Ruby部分在负担得起虚拟机的平台上运行得更快。 而且,由于通常不是Ruby导致速度缓慢,而是计算机系统体系结构和应用程序体系结构,所以可以执行诸如数据库复制,多个应用程序服务器,带有反向代理的负载平衡,HTTPcaching,memcache,Ajax,客户端caching等这些东西都不是Ruby。

最后,在Ruby 2.0上我找不到太多的消息 – 我认为我们距离那么好几年了?

大多数人都在等Ruby 1.9.1。 我自己正在等待JRuby上Ruby 1.9.1上的Rails 3.1。

最后,请记住,许多开发人员selectRuby,因为与其他语言相比,它使得编程更加快乐,而Ruby with Rails使得熟练的Web开发人员能够非常快地开发应用程序。

首先,比较慢哪些 ? C? python? 让我们在计算机语言基准游戏中 得到一些数字

  • Ruby 1.9与Python3在相同的数量级内
  • Ruby 1.9与PHP在相同的数量级
  • Ruby 1.9与Java 6服务器相比 , 速度要慢两个数量级
  • Ruby 1.9与C(gcc)相比 , 速度慢两个数量级

为什么Ruby认为慢?

取决于你问的对象。 你可以被告知:

  • Ruby是一种解释型语言 ,解释型语言往往比编译型语言慢
  • Ruby使用垃圾收集 (虽然C#也使用垃圾收集,但是在Ruby,Python,PHP等等algorithm上,比上面的内存分配密集程度更低的基准testing中出现了两个数量级)
  • Ruby 方法调用很慢 (尽pipe由于鸭子打字,他们可以说比在强types的解释语言中更快)
  • Ruby(除了JRuby) 不支持真正的multithreading
  • 等等

但是,那么,再慢一点呢? 与C相比,Ruby 1.9的速度和Python和PHP差不多,速度可以达到3倍(因为速度可以提高300倍),所以上面的代码(除了线程的考虑之外,应用程序是否会严重依赖于这个方面)主要是学术性的。

如果你想处理这种“缓慢”,你有什么select作为Ruby程序员?

写可扩展性,并抛出更多的硬件 (如内存)

哪个版本的Ruby最适合像Stack Overflow那样的速度至关重要且stream量很大的应用?

那么, 稀土 (与乘客结合)将是一个非常好的候选人。

这就是Rails的创始人David Heinemeier Hansson所说的:

Rails [Ruby]适用于绝大多数Web应用程序。 我们有网站每天进行数以百万计的dynamic网页浏览。 如果您最终select了雅虎或亚马逊的首页,那么使用任何语言的即时框架都不太可能会对您有所帮助。 你可能不得不推出自己的。 但是,我也想要免费的CPU周期。 我只是关心更多免费的开发者周期,并愿意为后者交易前者。

即抛出更多的硬件或机器的问题比雇用更多的开发人员更便宜,使用更快,但更难以维护语言。 毕竟,很less有人用C编写Web应用程序。

Ruby 1.9比1.8版本有了很大的提升。 Ruby 1.8的最大问题是它的解释性(没有字节码,没有编译),方法调用是Ruby中最常见的操作之一,特别慢。

在Ruby中,几乎所有的东西都是查找方法 – 增加两个索引数组的索引。 在其他语言暴露黑客(Python的__add__方法,Perl的overload.pm)的地方,Ruby在所有情况下都是纯粹的OO,如果编译器/解释器不够聪明的话,这可能会损害性能。

如果我正在用Ruby编写一个stream行的Web应用程序,我的重点就放在了caching上。 无论您使用何种语言,caching页面都会将该页面的处理时间减less到零。 对于Web应用程序来说,数据库开销和其他I / O开始比语言的速度更重要,所以我会专注于优化。

编写代码很慢。 读取代码很慢。 发现和修复错误是缓慢的。 添加function和增强速度很慢。 任何改进的东西都是胜利。 执行性能很less是一个问题。

答案很简单:人们说Ruby比较慢,因为它比其他语言的测量比较慢。 请记住,虽然,“慢”是相对的。 通常,ruby和其他“慢”语言足够快。

软件Joel – Ruby Performance Revis相当好地解释了它。 虽然可能会过时

我build议只要坚持使用Ruby on Rails,
如果您遇到性能问题,您可能会重新考虑使用不同的语言和框架。

在这种情况下,我真的会build议使用ASP.NET MVC 2的 C#,对于CRUD应用程序非常适用。

我会说Ruby比较慢,因为没有花费太多的精力来让翻译速度更快。 同样适用于Python。 Smalltalk和Ruby或Python一样dynamic,但性能更好,请参阅http://benchmarksgame.alioth.debian.org 。 由于Smalltalk或多或less已经被Java和C#(至less10年前)取代,所以没有进行更多的性能优化工作,Smalltalk的速度仍然比Ruby和Python快。 Xerox Parc和OTI / IBM的员工有钱可以为支持Smalltalk工作的人们付钱。 我不明白的是,为什么Google不把钱花在更快的Python上,因为他们是一个大的Python商店。 相反,他们花钱开发Go等语言。

首先,你是否在乎别人对你喜欢的语言的评价? 当它做它必须做的工作,你没事。

面向对象并不是执行代码的最快方法,但它确实有助于创build代码。 智能代码总是比愚蠢的代码和无用的循环更快。 我是DBA,看到很多这些无用循环,放下它们,使用更好的代码和查询,应用程序更快,更快。 你关心最后一个微秒? 你可能会有速度优化的语言,其他人只是做他们必须做的工作,可以由许多不同的程序员来维护。

这只是一个select。

显然,谈论速度Ruby丢失。 尽pipe基准testing表明Ruby并不比PHP慢很多。 但作为回报,您正在获得易于维护的DRY代码,这是所有各种语言框架中最好的。

对于一个小项目,你不会感觉到任何缓慢(我的意思是说,直到像<50K用户),因为代码中没有使用复杂的计算,只是主stream的东西。

对于一个更大的项目来说,支付资源是值得的,而且比开发人员的工资便宜。 另外,在RoR上编写代码的速度比任何其他代码快得多。

在2014年,你所说的速度差异的大小对于大多数网站来说是微不足道的。

在Web应用程序中处理Ruby性能的方法与其他任何编程语言相同:

build筑

在Rails中比在大多数其他Web框架中更容易。

在应用程序级别 ,caching任何应该caching的内容,并以智能的方式pipe理对数据库的访问(因为瓶颈通常是对大多数WEB应用程序的“DB”访问)。

Rails使得解决这些问题变得非常简单和自然。 对于caching数据,页面和片段有几个抽象 ,并且以优化和可重用的方式( Active Record和AREL )处理SQL部分也有非常好的抽象。

这就是为什么如此多的应用程序写入更快,不那么expression的语言(如PHP)最终比Ruby的对手慢。 解决这些语言的caching和查询并不像Ruby那样简单和优雅。

在基础设施层面 ,考虑负载均衡以及所有我不了解的东西是合理的。 我会通过聘请一些平台作为服务提供商(如Heroku或Engine Yard)来外包这个问题。 无论如何。 部署带负载平衡的导轨可能不是很难做到。

在许多容易测量的任务中,Ruby比C ++要慢(例如,执行严重依赖于浮点的代码)。 这并不令人惊讶,但有足够的理由让一些人无缘无故地说“Ruby很慢”。 他们不认为编写Ruby代码比C ++更容易和更安全。

最好的解决方法是在Ruby代码中使用以另一种语言(例如C,C ++,Fortran)编写的有针对性的模块。 那些可以做的繁重,你的脚本可以专注于更高层次的协调问题。

人们说Ruby比较慢,因为他们比较Ruby程序和用其他语言编写的程序。 也许你写的程序不需要更快。 也许对于你写的程序来说,Ruby并不是减慢速度的瓶颈

Ruby 2.1与Javascript V8相比

Ruby 2.1相比普通的Lua

Ruby 2.1与Python 3相比

性能几乎总是关于良好的devise和优化的数据库交互。 Ruby能够完成大多数网站所需要的速度,特别是更新的版本。 而且开发速度快,易于维护,成本效益高,顾客满意。 我发现JAVA在执行某些任务时执行速度较慢,而且由于在JAVA中开发很困难,许多开发人员创build速度较慢的应用程序,无论基准testing(基准testing通常是为了显示一个特定的和狭窄的function)所展示的理论速度能力。 当我需要不适合我数据库function的密集处理时,我根据平台为这些任务selectC或Objective-C或其他一些真正的高性能编译语言。 如果我需要创build一个基于数据库的Web应用程序,我使用RoR或有时C#ASP.NET取决于其他要求; 因为所有平台都有优点和缺点。 你的应用程序所执行的事情的执行速度是重要的,但毕竟,如果一个语言的一个狭窄方面的执行性能是重要的, 那么我可能仍然在使用汇编语言。

Ruby对开发人员的生产力performance良好 由于缺乏types,Ruby本质上是testing驱动的开发。 当用作C库的高级包装器时,Ruby性能很好。 在长时间运行的过程中,当JIT通过JVM或Rbx VM JIT编译为机器代码时,Ruby性能也很好。 Ruby需要在短时间内用纯Ruby代码来处理数字时,性能不佳。