我一直在 Ruby on Rails 3 中构建应用程序,并且开始担心性能优化。现在我希望我的问题对于这个网站来说不太主观,但我对事实感兴趣,而不是讨论,所以这里是:
虽然我试图让视图渲染得更快,但有一件事我根本不知道:我的目标是什么?给定一个相当复杂的页面,实际的加载时间是多少?我根本没有任何参考。
我通常在我的应用程序中看到的是这样的:
在 397 毫秒内完成 200 OK(查看次数:341.1 毫秒 | ActiveRecord:17.7 毫秒)
这是在我的生产服务器上,运行 Apache/Passenger。
我是唯一一个(!)在该服务器上发出请求的人,它是根服务器(不是虚拟的),运行 Ubuntu,AMD Athlon 64 X2 5600+,4 GB RAM
也就是说,对于我的大多数更复杂的操作(不是异常复杂,只是假设它是 20 个对象的分页列表,每个对象有 5 个计算属性或其他东西),ActiveRecord 时间几乎总是很好(200 毫秒。
现在,回答我的问题:当我开始使用 RoR 时,我的期望(也许不切实际)是,对于大多数具有平均复杂度的面向消费者的应用程序(比如 Facebook、Twitter 等,没有数百万用户),我会得到
我还期望数据库请求将成为主要瓶颈,因为其余的只是相对简单的计算,没有任何真正的复杂性。我认为可能需要 10 毫秒才能从数据库获取所有对象,然后可能还需要 5 毫秒来运行控制器代码、构建视图等。
由于我从未负责过任何生产应用程序,因此我不知道这种期望是否现实。所以我希望有经验的人向我指出我的现实期望应该是什么。
- (例如,“只要您是唯一提出请求的人,几乎所有内容(除了真正令人讨厌的内容)都应该在 50 毫秒内呈现”)
- 或(“实际上 300 毫秒对于 RoR 应用程序来说并不罕见,即使您是唯一的用户”)
- 或者(“你在开玩笑吗?在比你的服务器更小的服务器上,我收到 150 个并发请求的时间
再次强调,我希望这不是太主观,但我对 RoR 是否快的观点并不真正感兴趣,我希望从具有更多经验的人那里了解平均数字以及生产 RoR 应用程序的预期数据。否则我根本不知道在什么时候应该停止优化并接受我永远不会获得 10 毫秒的加载时间。
天哪,我不确定我是不是回答这个问题的人,但由于我已经在这些水域周围呆了足够多次,我可能对要看的东西有一个不完整的想法。
首先,响应时间是相当主观的。意思是,如果它对你来说足够好,那就足够了。根据我的经验,与您的描述类似的页面似乎花费与您所描述的内容一样多的时间。所以,你在两个方向上都没有相差几个数量级。
如果您想使用当前架构优化视图渲染,下一步是here http://railslab.newrelic.com/scaling-rails, 我认为。 Greg Pollack 出色地为您分解了这些内容,并确保您走上正轨。您一定会缓存您的资源并微调您的堆栈。这将是您最实用的一般建议。
如果您愿意查看您的部署架构,Ilya Grigorik 提出了一些很好的问题本文 http://www.igvita.com/2010/06/07/rails-performance-needs-an-overhaul/然后回答他们Goliath http://www.igvita.com/2011/03/08/goliath-non-blocking-ruby-19-web-server/。如果您的瓶颈正在加速服务器到客户端的往返速度,那么这可能就是可以采取的方法。
我尝试关注 Aaron Patterson 所说的有关表演的任何内容,例如这次演讲 http://confreaks.net/videos/427-rubyconf2010-zomg-why-is-this-code-so-slow。他将教授一般优化思想,其中大部分是针对服务器端代码的。您可能会发现一些与您当前问题相关的事情。
我被一位前同事拉到一边MWRC http://mtnwestrubyconf.org/今年,他告诉我,如果我现在不使用 JRuby 进行构建,我绝对是疯了。这是一种承诺,我一直拒绝做出这样的重大改变,直到我有真正痛苦的反应时间,我没有,而且听起来你也没有经历过。然而,JRuby 现在是一种非常主流的做法,您和我可能会在未来的某个时候在某些项目中接受它。
所以,最重要的是,我认为你已经进入了一个敏捷应用程序的领域。我想我会按照我提供的顺序来处理这些资源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)