Rails 如何缓存部分?
Rails how to cache partial?
我为 table 中的每一行使用 render partial: 'fragment', locals:{obj:item}
。
处理整个页面需要很长时间。
有没有办法在第一次加载时保存每个项目的所有片段,而不是在服务器工作期间每次都重新渲染它们?
已更新
card/index.html.haml
%table
=render partial: 'card/card', collection: @cards, cached: true
card/_card.html.haml
-cache card do
%tr=card.title
card_controller.rb
def index
@cards = Card.order(:name)
end
已解决
添加到 development.rb 后缓存开始工作:
config.action_controller.perform_caching = true
config.cache_store = :memory_store, { size: 64.megabytes }
在默认配置中 rails 没有缓存 enabled/configured 在开发中。
从 rails 5 开始,您可以 touch tmp/caching-dev.txt
或 rm tmp/caching-dev.txt
并重新启动服务器以切换它(对于早期版本,您可以将其反向移植到您的应用程序,请参阅 config/development.rb of 5.2.1)。
请注意,您还必须配置生产环境并拥有缓存后端 - 在每个工作线程中拥有单独的缓存可能会很浪费。因此 redis/memcached 应该很方便。
然后作为经验法则 - 最好在开发中使用相同的缓存存储和类似的配置,因为缓存存储具有非零延迟,有时不缓存某些东西会更快并且你想要你的开发环境更接近生产。
或者您可以 运行 rails dev:cache
切换缓存。
我为 table 中的每一行使用 render partial: 'fragment', locals:{obj:item}
。
处理整个页面需要很长时间。
有没有办法在第一次加载时保存每个项目的所有片段,而不是在服务器工作期间每次都重新渲染它们?
已更新
card/index.html.haml
%table
=render partial: 'card/card', collection: @cards, cached: true
card/_card.html.haml
-cache card do
%tr=card.title
card_controller.rb
def index
@cards = Card.order(:name)
end
已解决
添加到 development.rb 后缓存开始工作:
config.action_controller.perform_caching = true
config.cache_store = :memory_store, { size: 64.megabytes }
在默认配置中 rails 没有缓存 enabled/configured 在开发中。
从 rails 5 开始,您可以 touch tmp/caching-dev.txt
或 rm tmp/caching-dev.txt
并重新启动服务器以切换它(对于早期版本,您可以将其反向移植到您的应用程序,请参阅 config/development.rb of 5.2.1)。
请注意,您还必须配置生产环境并拥有缓存后端 - 在每个工作线程中拥有单独的缓存可能会很浪费。因此 redis/memcached 应该很方便。
然后作为经验法则 - 最好在开发中使用相同的缓存存储和类似的配置,因为缓存存储具有非零延迟,有时不缓存某些东西会更快并且你想要你的开发环境更接近生产。
或者您可以 运行 rails dev:cache
切换缓存。