轨。缓存JSON响应的一部分

时间:2016-08-25 11:03:00

标签: ruby-on-rails json caching serialization

操作是具有大型JSON对象的响应,可以将其分为动态和静态部分。

 render :json => {:dynamic => someting, :static => huge_static_object}

静态部分的评估花费的时间太长,所以它被缓存了。

 huge_static_object = Rails.cache.fetch(key) do
   do_something
 end

 render :json => {:dynamic => something, :static => huge_static_object}

现在rails反序列化每次从缓存+序列化读取到JSON。因此,让我们将结果存储在缓存中作为JSON。

huge_static_object = Rails.cache.fetch(key) do
   do_something.to_json
 end

 render :json => {:dynamic => something, :static => huge_static_object}

现在我们在渲染上进行序列化时遇到问题,因为动态部分需要序列化,但静态部分已经是序列化字符串。所以添加一个简单的代理类。

class JsonStringProxy

  def initialize arg
    @object = arg
  end

  def to_json(*args)
    self
  end

  def as_json(*args)
    self
  end

  def encode_json(*args)
    @object
  end

  def to_s
    @object
  end

end

 huge_static_object = Rails.cache.fetch(key) do
   do_something.to_json
 end

 render :json => {:dynamic => something, :static => JsonStringProxy.new(huge_static_object)}

现在一切正常,但可能更容易做到这一点?

0 个答案:

没有答案