为什么有人说Ruby很慢?

11 浏览
0 Comments

为什么有人说Ruby很慢?

我喜欢Ruby on Rails,并且在我所有的网页开发项目中都使用它。几年前,有很多关于Rails占用内存过多、扩展性不好的讨论,但这些问题已经被Gregg Pollack解决了。最近,我听到有人说Ruby本身很慢。\n

    \n

  • 为什么Ruby被认为是慢的?
  • \n

\n我觉得Ruby并不慢,但我只是用它来制作简单的CRUD应用和公司博客。在哪些项目中,我才会觉得Ruby变得慢呢?或者这种慢只是影响所有编程语言的问题?\n

    \n

  • 作为一个Ruby程序员,如果你想解决这个“慢”的问题,你有哪些选择?
  • \n

  • 对于像Stack Overflow这样速度至关重要且访问量巨大的应用程序来说,哪个版本的Ruby最适合?
  • \n

\n这些问题是主观的,我意识到架构设置(EC2 vs独立服务器等)会有很大的影响,但我想听听人们对Ruby慢的看法。\n最后,我找不到关于Ruby 2.0的太多新闻 - 我猜我们还需要几年时间才能看到它的发布?

0
0 Comments

为什么人们说Ruby很慢?

Ruby被认为是一种比较慢的编程语言。Rails的创始人David Heinemeier Hansson表示,对于大多数Web应用程序来说,Ruby的速度已经足够快了。他认为,相比于雇佣更多的开发人员和使用更快但更难以维护的语言,通过增加硬件或机器来解决性能问题更加经济实惠。因为很少有人会使用C语言来编写Web应用程序。

Ruby 1.9相比于1.8有了巨大的改进。Ruby 1.8的最大问题是它的解释性质(没有字节码,没有编译),以及Ruby中最常见的操作之一——方法调用特别慢。

Ruby中几乎所有的操作都是通过方法查找实现的,包括加法运算、数组索引等。而其他编程语言会提供一些技巧来优化性能(比如Python的__add__方法,Perl的overload.pm),Ruby则在所有情况下都采用纯面向对象的方式实现,如果编译器/解释器不够聪明的话,这可能会影响性能。

如果我要用Ruby编写一个流行的Web应用程序,我的重点将会是缓存。无论使用什么编程语言,缓存页面都能将该页面的处理时间降为零。对于Web应用程序来说,数据库和其他I/O操作比语言的速度更加重要,所以我会专注于优化这方面的性能。

当然,并不是很多人使用C语言来编写Web应用程序。但是许多性能关键的网站转向了Scala等其他编程语言。

我不同意“增加硬件资源更便宜”的观点。很难说服客户每隔X个月就为他们的平台支付更多的托管费用,因为该平台是以开发者为目标设计的。

当然,这个说法有点夸大。如果每天只有100个访问量,每增加10%的流量就需要为之新建一台服务器,客户肯定会抱怨。实际上,通常情况下,只有在有更多的流量并增加一个数量级之后,旧的硬件才无法满足需求。到那时,这个问题就变成了“一个好问题”的范畴,几乎没有人会抱怨升级硬件。而且,没有一个“客户”会在不了解这些情况的情况下运行如此高流量的网站。

让我们换个角度来看。如果客户因为他们的平台是以计算机为目标设计而需要等待3个月才能获得一个新功能,很难说服他们。如果这个新功能能大幅增加收入,那么购买额外的硬件将会物有所值。此外,对于许多应用程序来说,从一开始就选择一种快速的编程语言是一种过早优化的做法。很可能你的瓶颈会在其他地方,比如数据库读取、网络延迟等等。

0
0 Comments

为什么人们说Ruby很慢?

首先,相对于什么而言慢?C?Python?让我们在计算机语言基准测试网站上获取一些数据:

- Ruby 1.9与Python3相比,属于同一数量级。

- Ruby 1.9与PHP相比,属于同一数量级。

- Ruby 1.9与Java 6 server相比,慢两个数量级!

- Ruby 1.9与C (gcc)相比,慢两个数量级!

- ...

为什么Ruby被认为慢呢?

这要看你问谁了。你可能会听到以下说法:

- Ruby是一种解释性语言,解释性语言通常比编译性语言慢。

- Ruby使用垃圾回收机制(尽管C#也使用垃圾回收机制,但在上述更算法性、内存分配较少的基准测试中,C#比Ruby、Python、PHP等快两个数量级)。

- Ruby的方法调用很慢(尽管由于鸭子类型,它们在强类型解释性语言中可能比较快)。

- Ruby(除了JRuby)不支持真正的多线程。

- 等等。

但是,相对于什么而言慢呢?与C相比,Ruby 1.9在速度上与Python和PHP相当(相差不超过3倍),而与C相比(C可能快上300倍),以上的说法(除了线程方面的考虑,如果你的应用程序在很大程度上依赖这一方面)在很大程度上是学术性的。

作为一名Ruby程序员,如果你想解决这种"慢"的问题,你有哪些选择呢?

- 为可扩展性编写代码,并投入更多的硬件资源(例如内存)。

如果要选择一个适合像Stack Overflow这样速度至关重要且流量密集的应用程序的Ruby版本,应该选择哪个呢?

- REE(与Passenger一起使用)将是非常好的选择。

垃圾回收本身并不一定慢,但是MRI的垃圾回收是慢的。如果你需要更快的Ruby,你也可以考虑使用JRuby和REE。

感谢Vlad提供的链接到计算机语言基准测试网站。我也对REE很感兴趣,因为我已经安装了RVM,我想我很快就会尝试它。

你为什么要链接到已经过时的页面?基准测试网站的测量结果是使用最新版本的语言进行的,而且是在几周前进行的。

确实,2008年中期可能太过时了。我更新了链接,但它们将在几个月后又过时了。:)无论如何,硬件和一些补丁级别可能会有所不同,并且添加了一些其他测试,但整体情况并没有改变。

>>几个月后就过时了<< 不。随着新版本的发布,将进行新的测量。

>>在同一数量级内<< 如果你能活到7岁或活到69岁,那就是在同一数量级内。这个差异是否微不足道?

对于我来说,我不是一个可以用执行速度来测量寿命的程序。但是在我关心执行速度的地方,例如HTTP响应渲染时间,我知道我不会注意到7毫秒和69毫秒的渲染时间的差异(特别是当网络延迟为130毫秒时)。我知道我会注意到7毫秒和700毫秒之间的差异,并且我肯定会注意到7毫秒和7秒之间的差异,但不会在7毫秒和69毫秒之间。

谢谢你解释为什么"在同一数量级内"并不意味着差异微不足道。

C似乎比Ruby快10倍以上。那么70毫秒和700毫秒呢?你能察觉到这个差异吗?

0
0 Comments

为什么人们说Ruby很慢?

Ruby被认为很慢是因为如果你在Ruby和其他语言之间进行典型的基准测试,Ruby总是表现较差。

然而,对于一些简单的CRUD应用和公司博客,Ruby并不慢。在哪些项目中Ruby会变慢?或者这种慢只是影响所有编程语言的一种现象?

实时数字信号处理应用程序或任何实时控制系统可能不适合使用Ruby。在资源受限的计算机上(比如智能手机),Ruby(使用当今的虚拟机)可能会出现性能问题。

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

作为一个Ruby程序员,如果你想解决这种“慢”的问题,你有哪些选择?

转向更快的语言。但这是有成本的,这个成本可能是值得的。但对于大多数Web应用程序来说,语言选择不是一个相关的因素,因为没有足够的流量来证明使用性能更高的语言开发的成本更高。

对于像Stack Overflow这样速度至关重要且流量巨大的应用程序,哪个版本的Ruby最适合?

其他人已经回答了这个问题 - JRuby,IronRuby,REE将使你的应用程序中的Ruby部分在可以担负得起虚拟机的平台上运行得更快。由于通常不是Ruby导致慢速问题,而是你的计算机系统架构和应用程序架构,你可以进行数据库复制、多个应用服务器、反向代理的负载均衡、HTTP缓存、内存缓存、Ajax、客户端缓存等等。所有这些都不是Ruby。

最后,我找不到关于Ruby 2.0的很多新闻 - 我猜我们还要等很多年?

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

最后,请记住,很多开发者选择Ruby是因为它使编程成为一种更愉快的体验,与其他语言相比,Ruby和Rails使熟练的Web开发者能够快速开发应用程序。

0