2017-01-25 8 views
0

JBuilderを使用してJson応答を生成するエンドポイントとエンドポイント。 しかし、このJsonは工作が非常に遅く、この要求は数秒ごとに行われ、毎回更新する必要はないので、キャッシュすることにしました。高価なJBuilderが頻繁に再キャッシュされる結果をキャッシュします

ネストされた属性を持つ複雑なish 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

、レールに統合されたいくつかのキャッシングメカニズムがあります。ガイドでそれらについて読むことができます:http://guides.rubyonrails.org/caching_with_rails.html

特定のケースでは、いくつかのオプションがあり、すべて成功の可能性が高いです。

何かをキャッシュする前に、私はどの部分が最も高価であるかを知り、それをキャッシュして、それが十分に良いかどうかを見たいと思います。

あなたのクライアントがスマートな場合は、etagsを使用することもできますが、これはすべてあなたのユースケースに大きく依存します(キャッシングに関してはいつものように)。

サイドノートnginxのようなものをお持ちの場合は、リバースプロキシとしてご利用いただけますhttps://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/

関連する問題