【问题标题】:How to cache render :json如何缓存渲染:json
【发布时间】:2011-02-18 11:28:22
【问题描述】:

我有一个返回 json 输出的控制器索引操作。

render :json => my_array.to_json

我必须在这里使用什么类型的缓存。 “页面缓存”对此有意义吗?

或者我必须像下面那样做动作缓存

caches_action :index

【问题讨论】:

    标签: ruby-on-rails json caching page-caching action-caching


    【解决方案1】:

    动作缓存或页面缓存都可以正常工作;页面缓存的好处是永远不会调用 Rails 堆栈,但这取决于您是否需要控制谁访问该 Json 提要。

    如果您可以摆脱它,我非常喜欢使用页面缓存 - 可以节省大量系统资源。 :)


    编辑:页面缓存示例,以防有任何混淆:

    class SomeController < ApplicationController
      caches_page :index
      def index
        render :json => my_array.to_json
      end
    end
    

    除非我误解了什么,否则你只需要这样做。

    【讨论】:

    • 如何为 json 指定页面缓存。我的视图中没有任何模板?
    • 您应该可以在控制器中指定它,将代码添加到我的答案中。
    • 谢谢!。我认为页面缓存需要缓存视图的名称作为“caches_page”的参数而不是操作。
    • 啊哈,一个容易犯的错误。很高兴这对你有用。 :)
    • 但是,它不会以正确的 Content-Type 提供。为此,您需要调整您的虚拟主机(例如,如果使用 Apache)以指定该内容类型,或者手动缓存 JSON 并从您的操作中提供它。
    【解决方案2】:

    同样的注意事项应该适用于 JSON 作为任何其他输出。如果您需要验证用户对数据的访问权限,那么动作缓存是可行的方法,否则页面缓存应该没问题。

    如果数据因应用程序中的逻辑而发生变化,那么这两种形式的缓存都有问题,最好使用其他方式。

    【讨论】:

    • 如何为 json 指定页面缓存。我的视图中没有任何模板?
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2015-10-15
    • 2010-09-09
    • 2016-12-07
    • 2014-03-17
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多