是否觉得你的Rails应用响应速度过于缓慢呢?这是RailsConf2006上的一篇关于Rails应用性能优化的演讲稿,希望能够对你有所帮助。
在优化你的应用之前,我们首先需要明确以下几点:
不先进行性能测试就盲目的优化是非常愚蠢的
如果你的应用是因为设计不合理而导致性能低下,那么我建议你最好花点时间重构你的代码,而不是进行局部的优化,这只会使问题越来越多。
在优化之前,最好先为自己树立一个目标,这样可以防止因为过度优化而浪费时间,达到预期的目标后就该适可而止
没有必要对每一个页面都进行优化,只需要关注那些最经常被访问的页面就可以了,
在开发期间,进行持续的性能测量,这样有助于你在优化时定位性能瓶颈。
在优化完成后,要评估我们优化的质量,我们就需要先确定一组性能参数:
延迟,响应一个请求需要多少时间
吞吐量,每秒最多可以处理多少个请求
系统利用率,在大量请求需要处理的时候,你的系统在满负荷运转吗?
资源开销,在每个请求上所花费的开销
确定了要测量的性能参数,我们需要自动化的基准(benchmark)工具来帮我们进行优化前后的性能对比:
Rails日志文件(debug_level >= Logger::DEBUG)
Rails日志分析工具(需要将日志输出到syslog)
Rails基准脚本(script/benchmarker)
数据库提供的性能分析器
Apache Bench(ab或者ab2)
httperf
railsbench
可在http://rubyforge.org/projects/railsbench/下载
我推荐Railsbench,它可以测量Rails处理一个请求的原始性能,关于Railsbench后面的文章会有介绍。
除了基准测试工具,你也可以选择单纯的性能测试工具:
Ruby profiler
Zen profiler
rubyprof
Rails profiler script
Ruby Performance Validator(商业软件,仅支持windows)
不过事实上,Railsbench已经内置了性能测试工具,所以单独使用这些工具的必要性不大。
工具已经搞定,下面就让我们开始我们的优化之旅吧!
根据我的经验,Rails性能问题一般集中在以下几个方面:
很慢的helper方法
负责的路由
过多的联合(associations)
过多访问数据库
缓慢的session存取
不过,数据库的性能基本可以不用考虑,因为连接数据库的主要开销事实上在于建立ActiveRecord对象。
分享到:
相关推荐
Rails 3.0是该框架的一个重大版本更新,它对之前版本进行了大量的重构和优化,包括合并了Rails和Merb两个框架的优点,提供了更强大的路由机制、更灵活的配置选项以及更好的性能表现。此外,Rails 3.0还引入了Asset ...
Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rarWeb开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rarWeb开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rarWeb开发敏捷之道-应用Rails进行敏捷Web开发-第三版...
源码中可能包含关于如何配置Webpack的生产环境,使用Yarn进行包管理,以及如何进行代码分割、懒加载以提升应用性能的实践。 通过深入研究"rails-react-components-源码",开发者不仅可以掌握Rails与React的整合技巧...
标题 "rails-documentation-1-2-1.zip" 暗示这是一份关于 Ruby on Rails 框架的文档,版本为 1.2.1。Ruby 是一种面向对象的编程语言,而 Rails 是一个基于 Ruby 的开源 Web 应用程序框架,遵循 Model-View-...
9. **安全与性能优化**:书中还将涉及常见的Web安全问题,如CSRF、XSS攻击,以及如何优化Rails应用的性能,如缓存策略、数据库查询优化等。 10. **部署与维护**:最后,书中会讲解如何将Rails应用部署到生产环境,...
性能优化并不是要优化应用的每一个页面,而是应该集中精力在应用的“热点”——即那些被频繁访问的页面上。开发者应当在开发过程中持续进行性能测量,以便能够准确地找到并解决性能瓶颈。如果应用设计上存在固有的...
Flexigrid 是一个 JavaScript 库,常用于创建可扩展、灵活的表格,而 Ruby on Rails 是一个流行的开源 Web 应用程序框架,遵循 MVC(模型-视图-控制器)架构模式。下面将详细解释这两个技术以及它们在实际应用中的...
rails-angular-karma-example, 带有 angular.js 和 Karma 测试 runner的示例 Rails 应用 Rails 示例应用中的 Karma 为在 Rails 上创建 Karma 而创建的示例应用程序,描述了如何使用 Rails 为 AngularJS建立 Karma ...
rails-documentation-2-0-2
《Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版》是一本专注于使用Ruby on Rails框架进行高效敏捷开发的专业书籍。在当前快速迭代、需求多变的互联网环境中,敏捷开发方法论已经成为了软件开发行业的主流实践。...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它基于MVC(模型-视图-控制器)架构模式,用于快速开发动态网站。Rails以其“约定优于配置”(Convention Over ...
Active Job是一个用于在Rails应用中异步处理作业的接口,它抽象了不同的队列后端,并允许开发者编写一次作业,然后在不同的环境中执行,比如使用延迟队列或后台队列。Action Mailer是Rails提供的一个发送电子邮件的...
标题 "rails-development-environment-master.rar" 暗示这是一个关于Ruby on Rails开发环境的压缩包。Rails是基于Ruby语言的一个开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,广泛用于构建数据库...
rails-documentation-1-2-0-rc1.chm
在"rails-builds-test-源码.rar"这个压缩包中,我们很显然会接触到一个使用Rails框架构建的测试项目。接下来,我们将深入探讨Rails的几个关键知识点,以及如何通过源码来理解其工作原理。 1. **Gemfile与Gemfile....
Rails上的事件采购-演示应用我们已经组建了一个极小的事件采购框架,以电力 ,我们的。 这是一个正在运行的演示应用程序。 约300行构成Event Sourcing框架的代码在 。 此代码是出于教育目的。 该项目根据MIT许可条款...
在本项目"rails应用--导航栏实例工程"中,我们将探讨如何在Ruby on Rails框架下构建一个实用的导航栏。Rails是一个流行的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,使得开发过程更加高效且结构...