首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails部分渲染的渲染时间是峰值的10倍

Rails部分渲染的渲染时间是峰值的10倍
EN

Stack Overflow用户
提问于 2013-04-04 02:45:55
回答 1查看 576关注 0票数 5

在查看ruby mini-profiler输出时,我注意到了这种模式,其中5-6个部分以大约6-7毫秒的速度渲染,然后一个以60-70毫秒的速度渲染。我想知道这是什么原因,看起来像是冲水。所有模型数据都是在视图渲染开始时加载的,所以我知道不是由延迟加载引起的。

代码语言:javascript
复制
 Rendering: application/_row     7.1    +1107.0 
 Rendering: application/_row     68.7   +1115.0 
 Rendering: application/_row     6.7    +1184.0 
 ...     
 Rendering: application/_row     6.5    +1234.0 
 Rendering: application/_row     65.2   +1241.0 
 Rendering: application/_row     6.6    +1306.0 
 ...     
 Rendering: application/_row     6.6    +1321.0 
 Rendering: application/_row     66.6   +1328.0 
 Rendering: application/_row     6.6    +1395.0 
 ...     
 Rendering: application/_row     6.6    +1444.0 
 Rendering: application/_row     65.4   +1451.0 

Ruby 1.9.3p194,Rails 3.2.11

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-04 04:14:08

这肯定是MRI的垃圾回收器在刷内存。我用一个简单的Rails应用程序和一个部分代码做了一些测试:

代码语言:javascript
复制
100.times{Test.new}

我可以像你一样看到尖峰:

代码语言:javascript
复制
Rendered tests/_row.html.erb (3.9ms)
Rendered tests/_row.html.erb (45.3ms)
Rendered tests/_row.html.erb (5.2ms)
...
Rendered tests/_row.html.erb (42.8ms)

使用mini-profiler,很容易检查GC被调用了多少次,更重要的是,它运行了多长时间。对我来说,这些数字完全匹配。如果有10个峰值,那么也有10 (+/-1)个GC调用,而且GC的运行时间正好是正常渲染和耗时更长的渲染之间的差异。

要使用mini-profiler的GC计时器,请将?pp=profile-gc-time附加到您的URL。还有一篇关于tuning Ruby和mini-profiler的很棒的文章。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15795478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档