为什么人们都说Ruby很慢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (328)

我喜欢RubyonRails,我在所有的Web开发项目中都使用它。几年前,有很多人谈论Rails是一个内存占优势,以及它是如何扩展得不太好,但这些建议是由GreggPolack提出的。这儿...

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

  • 为什么Ruby被认为是慢的?我不认为Ruby是慢的,但我只是使用它来制作简单的CRUD应用程序和公司博客。在发现Ruby变慢之前,我需要做什么样的项目?还是这种缓慢只是影响所有编程语言的东西?
  • 如果你想处理这种“慢”问题,作为Ruby程序员,你有什么选择?
  • 哪个版本的Ruby最适合像Stack溢出这样的应用程序,在那里速度很关键,流量很大?

这些问题是主观的,我意识到架构设置(EC2与独立服务器等)有很大不同,但我想听听人们对Ruby慢的看法。

最后,我在Ruby#number0#上找不到多少消息--我想我们还需要几年的时间呢?

提问于
用户回答回答于

下面是Rails的创建者,大卫·海因梅耶·汉森说:

钢轨红宝石对于绝大多数的Web应用程序来说,速度足够快了。我们有网站每天做数百万的动态页面浏览。如果你最终在雅虎或亚马逊的头版上,任何语言的框架都不太可能对你有多大的好处。你可能得自己动手。但是当然,我也想要免费的CPU周期。我只是碰巧更关心免费的开发周期,并且愿意用前者来换取后者。

也就是说,在问题上投入更多的硬件或机器比雇佣更多的开发人员和使用更快但更难维护的语言更便宜。毕竟,很少有人用C语言编写Web应用程序。

Ruby#number0#比1.8有了很大的改进。Ruby#number0#最大的问题是它的解释性质(没有字节码,没有编译),而且方法调用(Ruby中最常见的操作之一)特别慢。

几乎所有东西都是Ruby中的方法查找--添加两个数字,为数组建立索引,这一点并没有什么帮助。其他语言公开黑客(Python的__add__方法,Perl的overload.pm)Ruby在所有情况下都执行纯OO操作,如果编译器/解释器不够聪明,这可能会影响性能。

如果我用Ruby编写一个流行的Web应用程序,我的重点将是缓存。缓存页面可以将页面的处理时间减少到零,不管您使用的是哪种语言。对于Web应用程序,数据库开销和其他I/O开始比语言的速度更重要,所以我将重点放在优化这一点上。

用户回答回答于

首先,在什么方面比较慢是吗?C?Python?让我们得到一些数字电脑语言基准游戏:

为什么Ruby被认为是慢的?

取决于你问谁。你可以被告知:

  • Ruby是一个解释语言而解释语言往往比编译语言慢。
  • Ruby使用垃圾收集(虽然C#,也使用垃圾收集,在上面的算法更多、内存分配更少的基准测试中,比Ruby、Python、PHP等高出两个数量级)
  • 红宝石方法调用很慢(尽管,由于鸭类型的存在,它们可以说比强类型的解释语言更快)
  • Ruby(JRuby除外)不支持真多线程
  • 等等。

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.

如果你想处理这种“慢”问题,作为Ruby程序员,你有什么选择?

为可伸缩性编写并向其抛出更多硬件(例如内存)

哪个版本的Ruby最适合像Stack溢出这样的应用程序,在那里速度很关键,流量很大?

好吧,REE和Passenger会很好。

用户回答回答于

为什么Ruby被认为是慢的?

因为如果在Ruby和其他语言之间运行典型的基准测试,Ruby就会失败。

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

在编写实时数字信号处理应用程序或任何类型的实时控制系统时,Ruby可能不会很好地为您服务。Ruby(现在的VM)可能会被资源受限的计算机(如智能手机)所窒息。

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

如果你想处理这种“慢”问题,作为Ruby程序员,你有什么选择?

切换到更快的语言。但这是要付出代价的。这是一项值得付出的代价。但是对于大多数Web应用程序来说,语言选择并不是一个相关的因素,因为没有足够的流量来证明使用一种更快的语言是合理的,而这种语言的开发成本更高。

哪个版本的Ruby最适合像Stack溢出这样的应用程序,在那里速度很关键,流量很大?

其他人已经回答了这个问题--JRuby、IronRuby、REE将使应用程序的Ruby部分在能够负担VM的平台上运行得更快。而且,由于通常不是Ruby造成的慢,而是您的计算机系统架构和应用程序体系结构,所以您可以做一些事情,比如数据库复制、多个应用服务器、反向代理的负载平衡、HTTP缓存、memcache、Ajax、客户端缓存等等。这些东西都不是Ruby。

最后,我在Ruby#number0#上找不到多少消息--我想我们还需要几年的时间呢?

大多数人都在等待Ruby1.9.1,而我自己也在JRuby上的Ruby1.9.1上等待Rails 3.1。

最后,请记住,许多开发人员选择Ruby是因为它使编程比其他语言更令人愉快,而且因为Ruby与Rails一起使熟练的Web开发人员能够非常快速地开发应用程序。

扫码关注云+社区

领取腾讯云代金券