我花了一些时间在heroku上调整我的应用程序,并花了一些时间在各种设置下调整Rails应用程序的性能.
当我运行ab-N300-C75...我的apply.com…#这是我的主站点的备份,在unicorn的免费cedar计划中
Requests per second: 132.11 [#/sec] (mean)
Time per request: 567.707 [ms] (mean)
Time per request: 7.569 [ms] (mean, across all concurrent requests)
(这是针对一个不做任何激烈事情的主页,所以我只提供了一个"heroku能以多快的速度进入一个非常简单的页面的免费计划?"例如,不是"你的应用程序应该这么快")
以下是我的Rails性能调优101 list :
首先测量浏览器/页面加载时间(浏览器发出很多请求,ab只告诉你其中一个,通常你的主页请求不是问题),从面向公众的页面的www.webpagetest.org或www.gtmetrix.com等工具获取页面加载基线数,或从面向私有页面的浏览器工具Yslow、google page speed或dynatrace获取页面加载基线数.如果你查看页面加载瀑布图(chrome/firefox中的"Net"面板),它通常会显示你的html加载速度很快(不到一秒),但其他所有内容都需要1-3秒才能加载.按照Yslow/page speed的建议进行改进(确保充分使用Rails 3.1assets资源 管道)
阅读你的日志(log)文件/new relic,找到"最慢/最频繁点击"请求的最佳点,并分析该请求会发生什么(是ruby速度慢/大量使用mem,还是大量查询?)你需要有一种可靠的方法来检测和监控性能问题,而不是随意改变.一旦确定了一些目标区域,创建测试脚本来帮助测试之前/之后,并证明您的更改有帮助,并检测是否出现了回归.
db列上缺少索引是最常见的问题之一,也是最容易解决的问题.对目标查询运行explain,或查看慢速查询日志(log),查看查询计划器正在做什么.根据需要为外键、搜索列或主数据(覆盖索引)添加索引.用实际生产数据进行重新测试,以证明这是有区别的.(您可以在heroku中运行explain,也可以运行缺少或未使用索引的查询)
大多数性能不佳的Rails应用程序都会遇到N+1查询,因为它很容易编写顺序.物主住址城市,而不是思考当这是一个循环时会发生什么.N+1查询不一定是慢查询,所以它们不会出现在慢查询日志(log)中,只是有很多查询,而且一次完成所有查询更有效.用法:包括或.includes()用于快速加载该数据,或者以另一种方式执行查询.
分析应用程序的流程,寻找缓存机会.如果用户在索引页面和详细信息页面之间来回跳转,然后再跳转,那么在不离开索引页面的情况下,可能会出现详细信息的ajax视图,这样可以更快地为用户提供所需的数据.我写了大约more thoughts about that on my blog封信
我在芝加哥今年的WindyCityRails会议上介绍了这些技术和其他 idea .你可以see the video here on my www.RailsPerformance.com blog
祝你好运