【问题标题】:Ruby on Rails: Why does calling a partial in my views take an extended time to render?Ruby on Rails:为什么在我的视图中调用部分渲染需要很长时间?
【发布时间】:2017-06-15 03:37:45
【问题描述】:

例如,我在我的 recipes/_cuisines.html.erb 文件中调用了三个部分:

  <%= render "recipes/cuisines/denmark.html %>
  <%= render "recipes/cuisines/spain.html %>
  <%= render "recipes/cuisines/italy.html %>

该文件中没有其他内容。部分只是没有集合的静态内容。这是我从日志中得到的:

  Rendered recipes/cuisines/_denmark.html.erb (4.6ms) [cache miss]
  Rendered recipes/cuisines/_spain.html.erb (2.3ms) [cache miss]
  Rendered recipes/cuisines/_italy.html.erb (5.3ms) [cache miss]
  Rendered recipes/_cuisines.html.erb (161.5ms) [cache miss]

如果我删除其中一个部分,我会得到如下信息:

  Rendered recipes/cuisines/_denmark.html.erb (4.6ms) [cache miss]
  Rendered recipes/cuisines/_spain.html.erb (2.3ms) [cache miss]
  Rendered recipes/_cuisines.html.erb (101.7ms) [cache miss]

删除另一个部分,我得到:

  Rendered recipes/cuisines/_denmark.html.erb (4.6ms) [cache miss]
  Rendered recipes/_cuisines.html.erb (50.5ms) [cache miss]

删除每个部分,我得到这样的结果:

  Rendered recipes/_cuisines.html.erb (0.9ms) [cache miss]

即使部分本身非常小,渲染每个部分似乎也需要非常多的时间。你知道是什么原因造成的,我可以做些什么来更快地调用局部变量?是否建议根本不调用 partials?

(我使用的是 Rails 5.1.1 和 ruby​​ 2.5.0dev)

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我相信您已经从开发环境中粘贴了日志。 如果是这样,那么这是由于 config.cache_classes 导致默认为 false 用于开发,true 用于测试和生产环境,如 rails 指南中所述。

    config.cache_classes 控制是否应用程序类和 每个请求都应该重新加载模块。默认为假 开发模式,测试和生产模式也是如此。

    config.action_view.cache_template_loading 控制是否 应在每个请求上重新加载模板。默认为任何 为 config.cache_classes 设置。

    我建议在testproduction 环境中运行应用程序,然后查看日志。

    【讨论】:

    • 我不知道它会这么简单 :) 非常感谢 Pramod!
    猜你喜欢
    • 2011-12-29
    • 2015-10-05
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多