Rails应用优化指南
如果你是一名Rails开发者,那么随着你的项目变得越来越庞大,你是否觉得你的Rails应用的响应速度变得越来越缓慢呢?来自Stefan Kaes的这篇关于Rails应用性能优化的文章或许能够帮你摆脱困境,虽说年代有些久远(RailsCONF 06上的一篇演讲稿[1]),但是其中的一些思想以及实践方法还是值得我们学习的。
首先,在开始优化你的应用之前,我们需要先明确以下几点:
没有相应的测试用例作为基础,就开始盲目的优化是非常愚蠢的;
如果你的应用是因为设计不合理而导致性能低下,那么我建议你最好花点时间重构你的代码,而不是进行局部的优化,因为这只会使问题越来越多;
在优化之前,最好先为自己树立一个目标,这样可以防止因为过度优化而浪费时间,达到预先设定的目标后就应该停下来了;
没有必要对每一个页面都进行优化,只需要关注那些最经常被访问的页面就可以了;
在开发期间,进行持续的性能测量,这样有助于你在优化时定位性能瓶颈。
其次,一旦优化完成,我们需要确定一组性能参数来衡量我们的优化效果,常用的参数包括以下这几个:
延迟,即响应一个请求需要多少时间;
吞吐量,即每秒最多可以处理多少个请求;
系统利用率,在大量请求需要处理的时候,你的系统在满负荷运转吗?(比如CPU占用率达到100%了吗);
资源开销,在每个请求上所花费的资源开销。
确定了要测量的性能参数,我们还需要一个自动化的基准(benchmark)测试工具来帮我们完成应用性能的测量,以及对多次测量的结果进行比对,我们可以通过以下工具来获得应用的各项性能指标:
Rails日志文件(debug_level >= Logger::DEBUG);
Rails日志分析工具(需要将日志输出到syslog)(RailsLogVisualizer就是一款不错的Rails日志分析工具;
Rails自带的基准测试脚本(script/benchmarker);
数据库提供的性能分析器;
Apache Bench(ab或者ab2);
httperf;
railsbench。
我推荐Railsbench,不同于其他工具,它测量的是Rails应用的原生性能(Raw performance)。由于去除了网络延迟等中间因素的干扰,Railsbench让你可以将精力集中到Rails应用本身,从而让你的优化变得更有针对性且高效(译者注:关于Railsbench的使用参看[3])。
除了基准测试工具外,你也可以选择单纯的性能测试工具:
Ruby profiler;
Zen profiler;
rubyprof;
Rails profiler script;
Ruby Performance Validator(商业软件,仅支持windows)。
不过事实上,Railsbench已经内置了性能测试工具,所以单独使用这些工具的必要性不大。
介绍完工具,下面就正式开始我们的优化之旅吧!
根据我的经验,Rails应用的性能问题一般集中在以下几个方面:
很慢的helper方法;
复杂的路由;
过多的联合(associations);
过多的数据库访问;
缓慢的session存取。
不过,数据库的性能基本可以不用考虑,因为相比于构造ActiveRecord对象的开销,连接数据库本身的开销几乎可以忽略不计。
在真正开始之前,还是有一点需要提前说明,优化策略事实上大部分情况下都不具备通用性,因为软硬件差异,用户使用习惯等等原因,可能会造成同一条优化策略在不同系统中得到完全不同的效果。不过也不必担心,这篇文章里讲的都是一些具有普遍适用性的策略。尽管如此,我还是建议你在应用这些策略时进行一下对比测试,因为很有可能它们对你的系统的作用有限,或者干脆不起作用,就像我们在开头说的,不要盲目优化。
优化Session
如果你的系统需要为每个访问者保存单独的Session信息(比如购物网站),那么session的存取速度将是影响系统性能的关键因素,目前可用的session存取策略有:
内存,快,相当快!但是如果你的应用挂了,或者由于其它什么原因需要重启,那么所有的session信息都会丢失,并且这种方式仅仅只能在单APP Server的应用中使用;
文件系统,很容易使用,每个session对应一个文件,并且可以通过NFS或者NAS轻松进行容量扩展,但是速度较慢;
数据库/ActiveRecordStore,使用简单(Rails的默认策略),但是很慢;
数据库/SQLSessionStore,与上面一种方式类似,但是使用原始SQL取代了ActiveRecord,性能有一定提升,关于SQLSessionStore与ActiveRecordStore的对比可以参看[1];
memcached,比SQLSessionStore稍微快一些,可扩展性较好,但是较难获取统计信息,关于memcached与SQLSessionStore的对比,参看[1];
DrbStore,在memcached不支持的一些平台上,可以选择DrbStore,但是性能比memcached要差一些,并且不支持session自动清除。
优化Cache
Rails默认支持以下几种Cache方式:
Pages,很快,整个页面都被保存在文件系统,Web Server可以直接绕过APP Server完成请求应答,但是存在一些固有缺陷,比如无法应付需要用户登录的应用;
Actions,访问速度仅次于Pages,缓存controller的action执行结果,同时由于可以调用到controller的过滤器,因此可以很好的防止未授权用户访问;
Fragment,缓存请求结果的一部分,也可以感知用户是否登录。
Action Cache事实上是Fragment Cache的一种特殊情况,跟session一样cache也有以下集中存取策略可供选择:
内存,最快的方式,如果你的程序只需要在一个APP Server上运行,那么这无疑是最好的方式;
文件系统,一般快,但可以使用正则表达式来刷新过期页面;
DrbStore,同文件系统相比,刷新过期页面更为快一些;
memcached,比DrbStore更快且易于扩展,但不支持使用正则刷新过期页面。
分享到:
相关推荐
8. **Testing**: 对于Rails应用,测试是必不可少的一部分。本书会教读者如何使用RSpec、Cucumber和FactoryGirl等工具进行单元测试、集成测试和行为驱动开发测试。 9. **Deployment**: 最后,书中还会介绍如何将开发...
8. **安全与性能**:如何防止SQL注入、XSS攻击,以及优化Rails应用以提高性能。 9. **部署**:如何将Rails应用部署到如Heroku或AWS等云平台,以及配置Nginx或Apache作为前端服务器。 通过学习《应用Rails进行敏捷...
这些知识对于深入理解和优化Rails应用至关重要。 #### 5. Models, Views, and Controllers(模型、视图和控制器) MVC是Rails的核心架构之一,这一章节将详细介绍这三个组件的作用和相互关系。模型负责与数据库...
其次,尽管Rails在提高开发效率方面做得很好,但它在性能优化方面可能不如某些竞争对手,对于大型或性能要求极高的应用,可能需要额外的优化工作。 Rails框架的成功原因之一在于它采用了“一站式”解决方案。不像...
- **集成Facebook API**:详细讲解如何将Facebook API集成到Rails应用中,实现用户登录、数据同步等功能。 ##### 3. 成功策略:营销与优化 - **增长黑客**:分享关于如何利用增长黑客技巧增加应用用户数量的方法。...
10. **部署与优化**:讲解如何将Rails应用部署到各种服务器环境(如Heroku、AWS),并提供了性能调优的建议。 《Rails 3 in Action》不仅覆盖了Rails 3.1的核心概念和技术,还涵盖了从开发到部署的全过程,是Rails...
综上所述,Rails Recipes是一本全面而深入的Rails指南,它不仅可以作为程序员解决具体问题的工具书,还可以作为提升 Rails 开发技能的进阶读物。无论是Rails新手还是经验丰富的开发者,都能从中获益,学会如何像大厨...
8. **部署**:将Rails应用部署到生产环境,如Heroku或AWS。 9. **性能优化**:缓存策略、数据库优化和其他提高应用性能的方法。 10. **错误和调试**:如何追踪和修复常见的Rails问题。 通过这本书,读者不仅可以...
- **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:读者已经具备一定的Ruby编程基础,并对Web开发有一定的了解。 #### 二、什么是Rails...
- **代码优化技巧**:提供了多种方法来优化Rails应用程序的性能,如缓存策略、数据库查询优化等。 - **测试与调试**:讲解了如何有效地进行单元测试、集成测试及端到端测试,并提供了调试技巧。 - **安全性**:讨论...
Rails API 4.0.0是Ruby on Rails框架的一个版本,专门针对构建应用程序接口(APIs)进行了优化。Ruby on Rails是由David Heinemeier Hansson创建的开源Web应用框架,遵循MVC(模型-视图-控制器)架构模式,以其简洁...
《Agile Web Development with Rails》是一本经典的Rails开发指南,中文版的出版使得更多的中国开发者能够深入理解并应用敏捷开发方法与Ruby on Rails框架。这本书是Rails开发者的必备参考资料,它详细介绍了如何...
对于更高级的主题,例如部署到服务器、性能优化、安全性和API开发,本书也会提供基础的引导,帮助读者了解实际生产环境下的Rails应用运维。 总的来说,《Ruby on Rails入门权威经典》是一本内容丰富、实践性强的...
Rails API文档是Ruby on Rails框架的核心参考资料,专为开发者提供详细的API接口信息和技术指南。Rails是基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web开发过程...
- **HAS_ONE支持增强**:虽然文档未详细说明HAS_ONE支持的具体增强内容,但可以推测Rails 2.1对此进行了优化或增加了新的功能选项。 综上所述,《RAILS2.1的中文版资料》为Ruby on Rails开发者提供了丰富的资源和...
9. 最后,部署到生产环境(如Heroku、AWS或自托管服务器)时,`rails_setup`可能包含部署策略和配置指南。 总的来说,Rails 4.2.0和Ruby 4.2.0的组合为开发者提供了强大而稳定的开发平台,而`rails_setup`文件则是...