Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails局部渲染具有10倍的峰值渲染时间_Ruby On Rails_Ruby_Partial Views_Mvc Mini Profiler - Fatal编程技术网

Ruby on rails Rails局部渲染具有10倍的峰值渲染时间

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

查看输出时,我注意到这种模式,即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    +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设置。可能内存分配的默认值超出了您的实际需要。对话中的人在这里写博客。