我使用JBuilder生成Json响应的端点和端点。 然而,这个Json的制作速度非常慢,因为这个请求每隔几秒就会发出一次并且不需要每次更新,我决定将其缓存。
它是一个复杂的Json,具有嵌套属性,可以访问一些模型关联。
如何缓存json结果并每隔x分钟将其呈现给用户?
file.json.jbuilder:
json.array!(@photos) do |photo|
json.extract! photo, :id, :title, :description, :image_updated_at
json.camera_roll_image_url URI.join(request.url, photo.image.url(:camera_roll)).to_s
json.original_image_url URI.join(request.url, photo.image.url).to_s
json.has_picture true
json.girl do
json.extract! photo.girl, :id, :name, :phone, :ddd, :country_code, :approved, :gender, :likes, :is_ad, :ad_type
json.user_liked photo.girl.liked_by_user?(@user)
if(photo.girl.is_ad == 1)
json.ad_info do
json.extract! photo.girl, :price, :description, :address, :ad_type
end
end
json.is_featured photo.girl.is_featured?
json.avatar URI.join(request.url, photo.girl.avatar.url(:thumb)).to_s
json.age photo.girl.age
json.country_num_code photo.girl.country_num_code
json.type photo.girl.type
end
json.check_in do
json.extract! photo.girl.check_ins.last, :latitude, :longitude
end
json.userLat @userLat
json.userLong @userLong
json.likes photo.likes
json.user_liked photo.liked_by_user? @current_user
end
答案 0 :(得分:0)
好吧,有几个缓存机制集成到rails中。您可以在指南中了解它们:http://guides.rubyonrails.org/caching_with_rails.html
在您的具体情况下,有几个选项,所有选项都很有可能成功。
在缓存任何内容之前,我想找出哪个部分最贵,然后缓存那部分并查看它是否足够好。
如果您的客户很聪明,您也可以使用etags,但所有这些在很大程度上取决于您的使用情况(就像在缓存方面一样)。
旁注,如果您有类似nginx的内容,可以将其用作反向代理https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/