Rails Render 一个 List 900ms 是不是很慢? 一般多长时间是可以接受的呢?

lithium4010 · 2015年06月09日 · 最后由 kgen 回复于 2015年06月12日 · 3498 次阅读
这的个环境是 development 

Completed 200 OK in 919ms (Views: 10.6ms | ActiveRecord: 92.5ms)

看这里 view 和 ActiveRecord 总共 100ms 左右,剩下的时间花在哪里了呢?


之前直接 render view 来显示微博列表,平均 6000ms +,慢的不能忍。

然后就采用 get json 然后前端来生成 Html 的做法。

用 react 来做前端的模板,响应时间缩短到了 1000ms 左右

今天优化了一个下午,在加上了 counter_cache 后时间缩短到 500ms 左右,每页 30 个 Micropost

发现 heroku 上面 200ms 左右。

开帖目的就是想有个优化的目标


我来贴上 profiling 点这里 ->

为了贴 profiling 开了一个新的 herokuapp,有更方便的吗?github?

——

今天又弄了一下,把一些能一次查出来的一次查好,heroku logs 显示一般 100ms 左右。

下面贴代码 Gist

Heroku 上面请求消耗时间有时浮动很大(有时候需要 600 多 ms,多刷几次后降到 100ms 左右),这个现象的原因是什么呢?

50-100ms 是比较正常的

偶尔一两个请求 在 200ms 左右 也还 ok

控制在 200ms 以内,就不会有网站很慢的感觉。

花在你的 controller 里面。可以装个 rack-mini-profiler 看看

我们的目标是 100ms 以内

#3 楼 @prajnamas 试了一下挺好用的

之前还没怎么注意过。。。rails 有这么慢吗。。。

#6 楼 @kabie 大概是我写的渣渣

楼主是不是 development 环境?

只有一行日志,什么环境都不说,关键代码没有,这是想解决问题还是猜谜大会?

正面回答标题:900ms 超慢,我的应用内容多的页面一般 50 ~ 100 ms。

#1 楼 @meeasyhappy #2 楼 @lgn21st #4 楼 @huacnlee #9 楼 @rei

谢谢大家提供参考标准,我会努力的

#11 楼 @lithium4010 你贴一个 rack-mini-profiler 的结果,我想就可以开展优化讨论了

#12 楼 @zlx_star 好主意我来贴 @zlx_star 贴好了

有几个 api 外部请求就得 400-500ms...怎么活~~

#14 楼 @limkurn 什么意思,说详细一点吧

#15 楼 @lithium4010 就是我们做的项目依赖外部接口请求返回的数据..然后外部请求有几个就得得 400ms 左右~~然后再拿回来处理...

#16 楼 @limkurn 了解了,在 strikingly 的时候学到说时间长的请求丢到 job 里面去,返回 job_id 再从前端去请求 对应的 job, 为了避免一个连接占很长的时间

#14 楼 @limkurn 多线程并行查询

@lithium4010 既然有了 profile 了,接下来的事情就简单了,找到耗时最长的操作,优化之,重复以上两步,直到你觉得你满意的时间。 以下是具体的几点建议:

  1. 如你所说,耗时长的操作丢到 job 里面去,配合 cron(whenever?) 事先把数据准备好。
  2. 一段时间保持不变或者多用户共享的数据,加上 cache(根据你使用的 template,可以看看它的缓存实现,如果想更深一步,可以看看 Ruby-China.org 的缓存方案)
  3. 一般情况用以上两点就够了,如果还是太慢,那再提出来吧,社区大牛保证能想出让你大跌眼镜的方法。😄

虽然没提出具体的优化方式,但是希望对你有帮助

#18 楼 @huacnlee 外部只有一个请求~ 本地数据库查询倒是没什么问题~~

#8 楼 @kgen development 和 production 差距挺大的,原因是什么呢?

#21 楼 @lithium4010 你看看 development.rb 和 production.rb 的配置差异,然后搜索一下差异的配置选项是什么含义,就能修炼这一程。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号