Rails 3.1.1과 Heroku를 사용합니다.레일의 주요 내용 만 캐시합니다.
나는 이것이 꽤 쉬운 수정이어야한다고 나는 믿는다. 그러나 이것을하는 법을 쉽게 (그리고 쉽게) 확인 할 수 없다. 나는 N + 1과 내가 해결해야 할 다른 것들이 많이있는 매우 느린 컨트롤러 (6 초) Product#show
을 가지고있다.
웹 사이트는 Product#show
에서 주 내용으로 한 열에 표시됩니다 및 daily product
이"데이터베이스에서 임의의 제품"을 포함하여 기타에 표시됩니다 두 개의 열이 웹 사이트 (main-column
및 right-column
)입니다. 내가 원하는 무엇
은 Product#show
에 의해 만들어진 main-column
의 내용은 캐시 할 수 있도록 (및 컨트롤러를 무시하고 6 초 우승)하는 것입니다. 그러나 오른쪽 열이 동적이어야하고 각 페이지 요청마다로드해야합니다. 내가 caches_page :show
를 사용하는 경우
그것은 나에게 새로운 Daily Product
로드 할 수 있도록하기 위해 매일 캐시를 만료해야하게 right-column
포함한 전체 웹 사이트를 캐시합니다. 좋은 해결책은 아닙니다.
cache('product-show' + @product.slug) do
을 사용하는 경우보기 (오른쪽?) 만 캐시되지만 여전히 컨트롤러를 통과해야합니다.
어떻게 해결할 수 있습니까?
def show
if !fragment_exist?("main_content")
@products = Product.all
@users_count = User.count
end
@random_products = Product.order("RANDOM()").limit(10)
end
show.html.erb
<!--MAIN CONTENT-->
<% cache("main_content") do %>
<%= @users_count %>
<% @products.each do |product| %>
<%= product.name %>
<% end %>
<% end %>
<!--SIDE CONTENT-->
<% @random_products.each do %>
<%= product.name %>
<% end %>
다음은 조각 캐싱을 사용해야하는 경우입니다. http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching – emrahbasman
조각 캐싱을 사용하면 컨트롤러가로드됩니다! 액션 캐싱이 (내 연구에 따라) 올바른 선택 인 것 같지만 그것이 작동하는지 확인할 수 없으므로 누군가 확인하기를 바라고 있습니다. – Christoffer