`
softstone
  • 浏览: 472799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[讨论]谈谈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有信心提供你需要的帮助。

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

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

我完全赞同。

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

 
分享到:
评论

相关推荐

    RubyonRails4_jb51.rar

    《Ruby on Rails 4 Tutorial》是一本针对初学者和进阶者深入理解Rails框架的经典教程。Rails是基于Ruby语言的一款强大的Web应用框架,它遵循“约定优于配置”(Convention over Configuration)的原则,使得开发者...

    sample-rails-gsap-prompter:带 gsap 的演示提示器

    在Web开发领域,Ruby on Rails(Rails)是一个强大的全栈框架,它以Ruby编程语言为基础,致力于简化开发流程并提高开发效率。这个名为"sample-rails-gsap-prompter"的项目,就是将Rails与GSAP(GreenSock Animation ...

    Scrum Poker in Rails5, docker-compose

    Rails是Ruby编程语言的一个Web开发框架,以其MVC(模型-视图-控制器)架构模式而闻名。Rails5引入了许多改进,如Action Cable支持实时通信,Action Text处理富文本编辑,以及更好的API模式。在构建Scrum Poker应用时...

    awesome-ruby-security:很棒的Ruby安全资源

    首先,我们来谈谈Ruby的安全性。Ruby是一种面向对象的编程语言,以其简洁、优雅的语法深受开发者喜爱。然而,如同其他编程语言一样,如果不正确地处理安全问题,Ruby应用程序也可能面临诸如注入攻击、跨站脚本(XSS)...

    redis-server下载

    首先,让我们谈谈Redis在Rails(Ruby on Rails框架)中的默认缓存。Rails内置了多种缓存策略,包括动作缓存、片段缓存、页面缓存等,而Redis可以作为其后台缓存引擎。通过配置`config.cache_store = :redis_cache_...

    howto:如何在Internet上处理事情

    本文将围绕如何高效地在互联网上处理事情,结合标签中的技术关键词,如Ruby on Rails、Swift、Markdown、Vagrant、Elixir、Phoenix框架以及数据分析,来探讨相关知识点。 首先,让我们从Web开发的基础——**Ruby on...

    PA-2.0:个人助理2.0项目

    Ruby on Rails,简称Rails,是Ruby的一个Web应用框架,遵循MVC(模型-视图-控制器)架构模式。在PA-2.0项目中,Rails简化了数据库交互、路由设置和视图渲染等复杂任务,极大地提高了开发效率。Rails的“约定优于配置...

    资料库名称:勤闲システムの开発実践チュートリアル

    接下来,让我们谈谈Ruby。Ruby是一种面向对象的、动态类型的编程语言,以其简洁、易读的语法而受到开发者喜爱。在开发勤闲システム时,Ruby将作为主要的后端语言,用于处理业务逻辑和数据库交互。Ruby on Rails...

    writingthroughmaterial

    "writingthroughmaterial" 是一个基于Ruby on Rails(RoR)框架构建的网站应用,它专为内容管理和在线展示设计。这个应用允许管理员便捷地管理各种类型的材料,包括音频、文档和图像,以便于用户访问和学习。 首先...

    jruby-lab:JRuby的实验室是jruby内容的存储库。 带有示例和参考

    纳特(Charles Nutter)谈谈invokedynamic JRuby谈论JVM的优势-JRuby:100%Java环境中的Ruby JRuby和Rails-JRuby on Rails 查尔斯·纳特(Charles Nutter)谈论JRuby“两全其美” JRuby两全其美-http: 企业环境中的...

    flatwhite:https的端口

    而Ruby on Rails(简称Rails)则是一个基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,使得开发Web应用更加高效。 在压缩包子文件的文件名称列表中,"flatwhite-master"可能是指...

    初识前端后端UI交互,初学者必看

    常见的后端技术有Java、Python、Node.js、Ruby on Rails等。数据库,如MySQL、MongoDB、PostgreSQL,存储并管理应用程序所需的数据。后端开发者还需要关注服务器配置、安全性、性能优化等问题。 **UI交互**,全称...

    跨站脚本漏洞(XSS)示例

    5. 使用最新的安全框架和最佳实践:许多现代Web开发框架提供内置的安全机制,如Ruby on Rails的protect_from_forgery或Django的CSRF middleware。 总的来说,理解和防范XSS漏洞对于任何Web开发者来说都至关重要。...

    miladrahimi.github.io:Milad Rahimi的网站。 软件工程师,后端开发人员和Web设计师

    后端开发人员通常使用技术如Node.js、Ruby on Rails、Django或Spring框架来构建应用程序的逻辑,同时与前端进行交互,通过API(应用程序接口)传输数据。数据库管理和优化也是其职责之一,例如使用MySQL、PostgreSQL...

    A_E31190672_Elyas_Agus_Suhadak

    此外,还有后端框架,如Express.js(Node.js平台上的Web应用框架)、Django(Python的全栈框架)和Ruby on Rails,它们为服务器端提供了结构和便利,帮助快速构建Web服务。 回到Elyas Agus Suhadak的项目"A_E...

Global site tag (gtag.js) - Google Analytics