我正在使用Virtual Box构建Rails应用程序。代码位于Windows上的共享文件夹中,Rails服务器在VM中运行。我注意到一个邪恶的性能下降渲染部分。我将250行渲染到表格中。我的代码的内联版本如下所示:
<% activities.each do |activity| -%>
<tr id="activity-<%= activity.id -%>-row">
<td><%= activity.name -%></td>
</tr>
<% end -%>
以上代码几乎在开发模式下加载。当我将内部<tr>
变成局部时,一切都会崩溃。
<% activities.each do |activity| -%>
<%= render "row", activity: activity -%>
<% end -%>
在_row.html.erb里面我有
<tr id="activity-<%= activity.id -%>-row">
<td><%= activity.name -%></td>
</tr>
加载页面现在需要将近60秒!
控制台显示
...200+ previous render statements
Rendered admin/org/activities/_row.html.erb (0.8ms)
Rendered admin/org/activities/_row.html.erb (0.7ms)
Rendered admin/org/activities/_row.html.erb (0.7ms)
Rendered admin/org/activities/_row.html.erb (1.0ms)
Rendered admin/org/activities/_row.html.erb (0.8ms)
Rendered admin/org/activities/_row.html.erb (0.8ms)
Rendered admin/org/activities/_row.html.erb (0.8ms)
Rendered admin/org/activities/_activities.html.erb (57231.0ms)
我假设这是一个虚拟盒问题。控制台显示每个部分加载在.7ms到1.6ms之间,这表明它在Rails上花费的时间很少。控制台的最后一行显示页面加载需要57秒,而不是接近各个部分加载时间的总和。
有没有办法加快速度,或者VirtualBox +共享文件夹是部分杀手?
答案 0 :(得分:1)
我最终放弃了Virtual Box中的共享文件夹。我仍然使用它们在主机和来宾之间移动文件,但我不再让开发代码存在于共享文件夹中。
对于我当前的开发设置,我在VM中有一个单独的dev
文件夹。此文件夹不共享。然后我使用SublimeText和SFTP包来编辑Windows端的文件。我的Windows框上有一个重复的dev文件夹,SFTP插件使VM dev文件夹保持与Windows dev文件夹同步。我在这里和那里遇到了一些同步问题(文件没有自动被正确地推送到VM),但是在大多数情况下我有一个很好的工作流程。我现在可以预测Windows中哪些类型的编辑可能会导致同步问题。
收益值得同步问题。我现在在VM中运行rails服务器和文件100%。这使我的平均页面加载时间从大约 4-7秒减少到大约200ms 。
此外,在尝试解决共享文件夹问题时,@ basia关于将集合呈现为部分的建议是一个有用的解决方案。不使用共享文件夹时速度更快。