2017-01-25 9 views
0

JBuilder를 사용하여 Json 응답을 생성하는 종단점과 종단점이 있습니다. 그러나이 Json은 매우 느리게 작성되며이 요청은 수초마다 수행되며 매번 업데이트 할 필요가 없기 때문에 캐시하기로했습니다.값 비싼 JBuilder는 자주 재발신합니다.

중첩 된 특성을 가진 복잡한 자식이며 일부 모델 연결에 액세스합니다.

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/