带有共享文件夹的 Virtual Box 中的慢速 Rails 部分
Slow Rails Partials in Virtual Box With Shared Folders
我正在使用 Virtual Box 构建一个 Rails 应用程序。代码位于 Windows 上的共享文件夹中,Rails 服务器在 VM 中运行。我注意到一个邪恶的性能下降渲染部分。我正在将 250 行渲染到 table。我的代码的内联版本如下所示:
<% 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)
我假设这是一个虚拟框问题。控制台显示每个部分加载时间为 0.7 毫秒到 1.6 毫秒,这表明它在 Rails 中花费的时间很少。控制台的最后一行显示页面加载需要 57 秒,这远不及各个部分加载时间的总和。
有什么方法可以加快速度,还是 VirtualBox + 共享文件夹是部分杀手?
我最终放弃了 Virtual Box 中的共享文件夹。我仍然使用它们在主机和来宾之间移动文件,但我不再让开发代码存在于共享文件夹中。
对于我当前的开发设置,我在 VM 中有一个单独的 dev
文件夹。此文件夹未共享。然后我使用 SublimeText 加上 SFTP 包,在 Windows 端编辑文件。我的 Windows 盒子上有一个重复的开发文件夹,SFTP 插件使 VM 开发文件夹与 Windows 开发文件夹保持同步。我 运行 在这里和那里遇到了几个同步问题(文件不会自动正确地推送到 VM),但在大多数情况下,我有一个很好的工作流程。我现在可以预测 Windows 中的哪些类型的编辑可能会导致同步问题。
回报值得同步问题。我现在 运行 rails 服务器和 VM 中的文件 100%。这将我的平均页面加载时间从大约 4-7 秒减少到大约 200 毫秒 。
此外,@basia 关于将集合渲染到部分中的建议在尝试解决共享文件夹问题时是一个有用的解决方案。不使用共享文件夹时速度更快。
我正在使用 Virtual Box 构建一个 Rails 应用程序。代码位于 Windows 上的共享文件夹中,Rails 服务器在 VM 中运行。我注意到一个邪恶的性能下降渲染部分。我正在将 250 行渲染到 table。我的代码的内联版本如下所示:
<% 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)
我假设这是一个虚拟框问题。控制台显示每个部分加载时间为 0.7 毫秒到 1.6 毫秒,这表明它在 Rails 中花费的时间很少。控制台的最后一行显示页面加载需要 57 秒,这远不及各个部分加载时间的总和。
有什么方法可以加快速度,还是 VirtualBox + 共享文件夹是部分杀手?
我最终放弃了 Virtual Box 中的共享文件夹。我仍然使用它们在主机和来宾之间移动文件,但我不再让开发代码存在于共享文件夹中。
对于我当前的开发设置,我在 VM 中有一个单独的 dev
文件夹。此文件夹未共享。然后我使用 SublimeText 加上 SFTP 包,在 Windows 端编辑文件。我的 Windows 盒子上有一个重复的开发文件夹,SFTP 插件使 VM 开发文件夹与 Windows 开发文件夹保持同步。我 运行 在这里和那里遇到了几个同步问题(文件不会自动正确地推送到 VM),但在大多数情况下,我有一个很好的工作流程。我现在可以预测 Windows 中的哪些类型的编辑可能会导致同步问题。
回报值得同步问题。我现在 运行 rails 服务器和 VM 中的文件 100%。这将我的平均页面加载时间从大约 4-7 秒减少到大约 200 毫秒 。
此外,@basia 关于将集合渲染到部分中的建议在尝试解决共享文件夹问题时是一个有用的解决方案。不使用共享文件夹时速度更快。