Ruby on rails Rails局部渲染具有10倍的峰值渲染时间
查看输出时,我注意到这种模式,即5-6个部分渲染,每个部分大约6-7毫秒,然后在60-70毫秒时渲染一次。我想知道是什么导致了这种情况,它看起来像某种刷新。所有模型数据都是在视图渲染开始时加载的,所以我知道这不是由延迟加载引起的Ruby on rails Rails局部渲染具有10倍的峰值渲染时间,ruby-on-rails,ruby,partial-views,mvc-mini-profiler,Ruby On Rails,Ruby,Partial Views,Mvc Mini Profiler,查看输出时,我注意到这种模式,即5-6个部分渲染,每个部分大约6-7毫秒,然后在60-70毫秒时渲染一次。我想知道是什么导致了这种情况,它看起来像某种刷新。所有模型数据都是在视图渲染开始时加载的,所以我知道这不是由延迟加载引起的 Rendering: application/_row 7.1 +1107.0 Rendering: application/_row 68.7 +1115.0 Rendering: application/_row 6.7
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这是最确定的MRI的垃圾收集器扫描内存。我使用一个简单的Rails应用程序和一个部分:
100.times{Test.new}
我能看到像你一样的尖刺:
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。还有一篇关于mini profiler的文章。可能是GC的作用。虽然60毫秒看起来很长,但我在开发过程中也经常看到这种情况。我很想知道它为什么会发生。忘了提到:开发,在服务器上。你可以尝试挂接一个更全面的探查器…这只是一个猜测,我会看看GC设置。可能内存分配的默认值超出了您的实际需要。对话中的人在这里写博客。