页面
View的helper方法生成html元素,比如:
link_to "My Company", company_path(@company)
# => <a href="/companies/1">My Company</a>
过度使用helper方法会引起性能问题。比如上面这个方法,每次都会调用link_to和company_path --
从routes中解析path。
但注意,只有在过度使用的时候,才需要考虑是否可以减少helper方法的使用来提升性能。同时,也可以用一些工具替代ERB来提升性能,比如erubis
:它通过预处理避免每次调用的重复开
销。
多线程
版本2.2之后,Rails终于是线程安全的了,意味着我们可以开启多线程模式,这绝对是一个巨大的进步。
非线程安全的Rails,无法有效利用共享资源。在以前的版本中,假如我们的应用部署在mongrel上,那么对于n个并发请求,就需要n份
rails,n份application,n个数据库链接等等。几乎所有的东西都无法共享。
多 线程模式,对于Rails on JRuby带来的改变尤其巨大,因为jruby的线程是native
thread(相对于ruby的green
thread)。比如我们的系统只开启了一个应用实例来处理所有的请求(当然,当瓶颈出现在一些共享资源上时,可以考虑增加实例)。
还是用数字来说话吧:Rails on JRuby的内存使用是原先非线程安全时的1/n (n是并发请求的数量),是Rails on
Ruby的线程安全模式的1/m(m是cpu的数量)。
那么,开启多线程模式要注意什么?如果你的应用中有类变量的使用,请注意它们是否会在并发下出现问题。
服务器
服务器的配置优化对性能的影响很大。我们的系统以war包的形式部署在tomcat上,主要的配置优化在于对JVM的内存分配上。可以从这几个方面
看:
xms -- 初始内存大小是否合适?如果你的系统在一开始的时候就需要较大的内存分配,就可以设置一个合理的xms值。
xmx --
最大内存大小是否合适?如果太小,会导致OutOfMomery,会导致持续的GC;反之,则会导致一次GC时间过长,在这段时间内,系统的性能将会受到
影响(当然,这跟GC的算法有关)。
性能优化
的几个原则
更近
数据库,应用服务器,web服务器以及客户端,这是信息传输的一条链(当然,有些系统的链会更长,更复杂)。那么,减少响应时间的一个原则就是:让
数据离客户端更近。
一个最能体现更近原则的优化就是客户端缓存--客户端是距离用户最近的地方。
更加细节的一些例子,比如sql server的nonclustered
index现在可以把非键的数据挂载在索引的叶子节点上,这样就不需要再去表上扫描获取这些数据。这也是更近原则的一个体现。
更快
更加快速的响应,需要更加快速的计算。前文中提到的加速页面元素的生成,就属于更快原则。
这方面的实践包括有算法优化,数据库索引,使用更加高效的方法,使用正则表达式匹配等等。
举个Rails中的例子:使用Model.find_by_*方法是很低效的,因为它需要调用method_missing来动态生成方法。而
Model.find_by_sql方法的效率高很多。
更少
传输过多的数据,进行过多的操作,可能都会影响性能。
减少数据的传输量有很多例子:压缩静态文件,以减少服务器和客户端之间的传输量;避免在action中滥用实例变量,以减少实例变量在action
和view之间的传输;正确合理使用finder,以减少从数据库中获取的数据量等等。
减少操作次数的例子有:合理运用预先加载,减少查询次数;减少transaction的不必要重复创建等等
其它还有:缩小transaction的粒度;缩小并行运算锁的粒度等等。
平衡
在追求更近、更快、更少的时候,要注意平衡。
比如给JVM分配一个合理大小的内存,而不是过大或者过小;不要滥用数据库索引,要考虑是否会影响插入数据的速度;平衡一个运算在空间和时间上的消
耗;保持性能在长时间内的平稳等等。
性能优化是一个不断实践、不断调优的过程。比如前文中提到的服务器端缓存,最后并没有被采用,因为我们发现相比而言缓存命中的开销反而更大。
小结
在经过一系列的优化之后,我们的系统很好地满足了客户对性能的要求。下面是几点总结:
- 大多数性能问题都出在IO上,IO应是关注的重点。
- 性能优化是一个实践的过程,空讲理论是没有意义的。
- 出现性能问题,先不要怪罪于平台、语言、框架,大多数性能问题都产生于错误或者不合理的实现。
- 性能优化过程并不一定需要贯穿整个项目的始终,但一定要时刻保持对性能问题的关注:从刚开始的架构设计,到项目开发中的代码编写、重构等等,性能
都应该是关注的一个方面。
--------------------------------------------------------------------------------------------------------------
相关推荐
Rails性能优化是一个涉及多个方面的复杂过程,它要求开发者对Ruby on Rails框架的内部机制有深刻的理解,并且能够合理地应用各种技术和工具来提升应用的性能。在性能优化的过程中,首先应该避免盲目优化,而是要通过...
随着Web应用程序变得越来越复杂,性能优化成为了确保用户满意度和提高系统效率的关键步骤之一。Ruby on Rails(简称Rails),作为一个流行的Web开发框架,虽然提供了丰富的功能和快速的开发体验,但也可能会面临性能...
在构建复杂的Rails应用时,性能优化是至关重要的。...理解系统的工作原理,针对性地进行优化,是提升复杂Rails系统性能的关键。在实践过程中,持续监控、分析和调整,才能确保应用始终处于最佳状态。
10. 性能优化:Rails应用可以通过缓存、数据库索引、数据库连接池、延迟加载等技术提升性能。在线考试系统可能会大量使用缓存来减少数据库查询,提高响应速度。 以上是关于“ruby on rails在线考试系统”的主要知识...
总结上述知识点,在构建高可用的rails应用时,需要综合考虑多个组件的配置,以及对性能的持续监控与优化。整个架构需要确保在单点故障情况下应用的持续可用,同时还要有良好的扩展性和维护性。对于有一定Ruby基础的...
10. 性能优化:使用缓存(如Rails的Page Cache、Action Cache)、数据库索引、资产打包(如Webpacker或Sprockets)等技术提高网站性能。 在这个项目中,文件夹`master_rails_by_actions-master`可能包含了整个商城...
这一部分将覆盖一些高级的Rails主题,如性能优化、多线程和并发处理、部署策略等。对于想要深入了解Rails框架并构建高性能Web应用的开发者来说,这些知识是必不可少的。 #### 10. Rails Plugins(Rails插件) ...
总之,RoR性能优化是一个全面的过程,涵盖从操作系统到Web服务器配置,再到代码本身的改进。每个环节的优化都能显著提升网站的运行效率,使RoR应用能够更好地应对高负载和大规模用户的需求。通过学习和实践这些经验...
3. Rails 3.2: Rails 3.2进一步优化了性能,引入了低延迟的LogSubscriber,提升了日志记录的效率。ActiveRecord的查询性能得到提升,例如添加了`pluck`方法,可以直接获取数据库列的值。此外,`rails generate ...
学习如何配置Nginx或Apache,使用Capistrano进行部署,以及监控和优化应用性能。 9. **前端技术**:虽然主要讨论后端,但前端界面也是购书系统的重要组成部分。可能涉及HTML、CSS、JavaScript,以及使用Bootstrap或...
1. **优化性能**:Rails应用在处理大量请求时可能会面临性能挑战。书中会介绍如何通过缓存(如Action Cache和Page Cache)、数据库查询优化、资产管道优化等手段提升应用性能。 2. **复杂的路由**:Rails的路由系统...
标题 "Rails相关电子书...此外,书中可能还涵盖了Rails的安全实践、性能优化以及与其他技术(如JavaScript库)的集成等内容。对于希望深入理解Rails框架或想要提升Web开发技能的开发者来说,这本书是一个宝贵的资源。
其中,学生选课系统作为学校管理的重要组成部分,对于提高教学效率、优化资源配置有着不可忽视的作用。本文将深入探讨如何使用Ruby on Rails框架来开发这样一个系统。 Ruby on Rails(简称Rails)是一款基于Ruby...
3. **路由优化**:Rails API的路由系统更侧重于资源操作,简化了API路由的定义,方便管理各种HTTP动词(GET, POST, PUT, DELETE等)。 4. **分页和过滤**:在构建API时,通常需要支持分页和过滤数据。Rails API可以...
- **性能优化**:考虑缓存策略,如Rails的Page、Action和Fragment Cache,以及数据库查询优化。 - **响应式设计**:确保系统在不同设备上都能良好显示,可以使用Bootstrap或其他前端框架。 - **版本控制**:使用...
2. 性能优化:通过减少加载的库和组件,API模式提高了响应速度,增强了服务器性能。 3. JSON优先:默认支持JSON格式的数据交换,方便与前端或其他服务进行数据交互。 4. 小巧的Gemfile:只包含构建API所需的基本gem...
6. **性能优化**:考虑使用缓存、异步处理等方式提高API的响应速度和并发能力。 ### 四、示例:创建一个简单的用户管理API 假设我们需要为一个博客系统开发用户管理的RESTful API,下面是一个简化的例子: 1. **...
- **性能优化**:包括如何使用缓存机制提高应用性能,以及如何优化数据库查询等。 - **测试驱动开发(TDD)**:介绍如何使用RSpec和Capybara等工具进行单元测试和集成测试。 - **部署策略**:探讨如何将Rails应用部署...
10. **部署与优化**:讲解如何将Rails应用部署到各种服务器环境(如Heroku、AWS),并提供了性能调优的建议。 《Rails 3 in Action》不仅覆盖了Rails 3.1的核心概念和技术,还涵盖了从开发到部署的全过程,是Rails...