免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1033 | 回复: 0
打印 上一主题 下一主题

[转]谈谈Ruby on Rails的性能问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-10 13:17 |只看该作者 |倒序浏览

关于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有信心提供你需要的帮助。
最后,纯月这样阐述他的想法:
我希望初学者能够选择成熟的语言,成熟的模式,以及参考很多现有的成熟的程序来进行开发。
我完全赞同。
新技术的探索、尝试和积累经验,是一件高成本、高风险的事情,不必要也不应该让所有公司、所有人都来做这件事。大多数的公司、大多数的开发者可以并且应该采用更成熟、更经过实践检验的技术,稳妥地完成自己的任务。至于层出不穷的新技术,只要对它保持一定的敏感度,并且知道“一旦需要的时候可以到哪里去寻求帮助”,也就足够了。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=845123


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26076/showart_229444.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP