[讨论]谈谈Ruby on Rails的性能问题

关于Ruby/Rails的讨论仍在团结友好而卓有成效地进行着。纯月摘要翻译了一篇“Rail开发中常见的性能问题”,但他对这篇文章有着明显的、无意或有意的误读。在前面列举的5个注意事项中,后3项:

3 repeating identical computations during request processing(在处理请求过程中反复做同样的计算操作)
4 reading too often and too much from the database (especially in conjunction with associations)(过于频繁读取数据库,尤其是对于关联数据的频繁读取)
5 relying too much on inefficient helper methods(过多依赖低效的帮助方法)

暂且不讨论纯月的翻译是否准确。这三项实际上是所有企业应用——不管用什么技术开发——都必须注意的问题,而不是Rails独有的问题(当然也不构成Rails的优点)。至于原文提到的第二点:

2 doing things on a per request basis, which could have been done once at startup(有些事情本可以只在启动时做一次,却搞成了处理每个请求时都做一次)

在这方面,Rails有它独到的好处。Rails在使用development环境配置时,服务器会自动装载修改之后的源代码。也就是说,修改会实时地体现到运行中的服务器、体现到你的单元测试和功能测试,所以纯月关于“如果这样实现,最直接的后果是难于调试”的担忧是不存在的。更何况,开发Rails应用的时候,用Test::Unit做单元测试和功能测试、用Rake做自动化构建是自然而然的,所以根本就不会有需要调试的时候——至少我从来没有用过调试器,虽然我知道irb是个很好的调试环境。

原文提到的第一点(以及纯月的置疑)如下:

1 choosing a slow session container
选用慢速的 session container (简直是废话,RoR直接提供高速的session container不就得了)

实际上session container(或者说得更准确点,session storage)这个事情是很复杂的……简单地说,session数据可以用PStore格式保存成平面文件(Rails的缺省做法),也可以通过ActiveRecord保存到数据库,也可以通过DRb保存在网络驱动器上(以便多台服务器共享),也可以保存在memcached,当然也可以直接保存在服务器内存中或者普通文本文件中。对于这些不同的存储方式,Rails的作者在《应用Rails进行敏捷Web开发》书中给出的选择方案是……看情况。因为不同的方案有不同的适用场合,配置的难易程度也有不同(譬如说memcached就不是那么容易配的)。所以,并不能说高速的session container就一定是好的。在Rails这端来说,选择一个session container只不过是修改一个参数的事情,但你应该根据实际的需求来选择这个参数。

纯月还在“三个案例”的后面这样说道:

这些程序的确很成功。但是这些系统显而易见是经过精心设计的。对于很多初学者,或者小规模软件开发者,很难熟悉这些优化的过程。 我想一但他们掌握优化的细节,用Python(google的最爱)或者J2EE同样可以开发出性能更高的程序。

确实如此,毫无疑问。企业应用是一件复杂的事情,没有任何一个工具可以让它突然就变得简单了。不管用什么工具,“初学者”都不可能做出成功的企业应用,因为企业应用是需要“经过精心设计”的。纯月不应该忘记的一点是:之所以你认为J2EE比起RoR更可信赖,首先是因为你自己在这上面已经积累了很多的经验。对于缺乏这些经验的“初学者”来说,要习得J2EE的这些经验至少和学习RoR同样困难——如果不是更难的话。另外值得一提的是,RoR的服务器架构秉承了PHP/Perl一贯的CGI套路(而不是J2EE采用的servlet套路),所以具有LAMP经验的开发者学习RoR比学习J2EE要容易得多了。

纯月的另一个问题是:

而且用户该如何应付日本人的Rudy的语言和Rails的各种调试技术呢?

嗯……我不知道应该如何理解“日本人的”这个定语。Ruby-lang确实有一个日文版本,但我从来没看过,似乎也没有对我学习Ruby有任何影响,何况现在Ruby社群里最活跃的几个家伙都是讲英文的。至于说如何学习Rails,现在已经开始有一些图书陆续翻译引进。而且这里还有ThoughtWorks:ThoughtWorks在全球范围内有多个项目已经采用了Rails,好几个ThoughtWorker是Ruby社群的活跃分子、积极的贡献者和领导者,Addison-Wesley的Professional Ruby丛书就是由我们的同事Obie Fernandez主编的。如果你的公司、你的项目有计划用到Ruby/Rails,ThoughtWorks有信心提供你需要的帮助。

最后,纯月这样阐述他的想法:

我希望初学者能够选择成熟的语言,成熟的模式,以及参考很多现有的成熟的程序来进行开发。

我完全赞同。

新技术的探索、尝试和积累经验,是一件高成本、高风险的事情,不必要也不应该让所有公司、所有人都来做这件事。大多数的公司、大多数的开发者可以并且应该采用更成熟、更经过实践检验的技术,稳妥地完成自己的任务。至于层出不穷的新技术,只要对它保持一定的敏感度,并且知道“一旦需要的时候可以到哪里去寻求帮助”,也就足够了。

 

你可能感兴趣的:(应用服务器,memcached,企业应用,Ruby,Rails)