2013-10-28 1 views
0

블로그를 비롯한 여러 가지 질문을 여러 시간 동안 읽은 후 마침내 도움을 요청해야했습니다.주 레이아웃의 부분이 페이지 요청마다 다시 렌더링되거나 업데이트되는 것을 방지하려면 어떻게해야합니까?

저는 레일스 레이아웃/렌더링/산출 메커니즘에 대한 이해가 아직 부족하다고 생각합니다. 그러므로 어쩌면 어리석은 질문 일 수 있습니다. 나는 당신의 용서를 구걸한다.

페이지 요청마다 부분 인쇄물이 렌더링되지 않도록 할 수 있습니까? 내 앱의 링크를 클릭 할 때마다 레이아웃과 부분을 다시로드한다는 뜻입니다.

내 목표는 어떻게 든 정적 사이드 바를 가지며, "application.html.erb가 처음으로로드되었습니다"부분을 렌더링하여 한 번 채우고 아약스 만 사용하여 업데이트합니다.

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title><%= content_for?(:title) ? yield(:title) : "GEN" %></title> 
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "GEN" %>"> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    </head> 
    <body class="darkbody"> 
    <header class="navbar navbar-fixed-top navbar-inverse"> 
     <nav class="navbar-inner"> 
     <div class="container-fluid"> 
      <%= render 'layouts/navigation' %> 
     </div> 
     </nav> 
    </header> 
    <main role="main"> 
     <div class="container-fluid"> 

     <div class="row-fluid"> 
      <div class="span3"> 

      <%= render partial: 'charts/dashboard', layout: false %> 

      </div> 

      <div class="span9"> 
      <div class="well well-small"> 
       <%= render 'layouts/messages' %> 

       <%= yield %> 

      </div> 
      </div> 

     </div> 

     </div> 
    </main> 
    </body> 

</html> 

은 "대시 보드"부분 번로드해야 다시 렌더링되지 않을 :

여기 내 응용 프로그램의 레이아웃입니다. 즉, 앱을 탐색하면 yield 섹션의 콘텐츠는 변경/새로 고침되지만 기본 레이아웃 인 'partials'에는 표시되지 않습니다.

동기 부여가? 대시 보드는 도우미 메서드를 사용하여 계산되고 사용자 세션 전체에서 업데이트되지 않는 값을 표시합니다. 많은 도움을 얻으면이 도우미는 모든 사용자가 클릭 할 때마다 실행되며 동일한 결과를 반환하더라도 앱 서버를 강조합니다. 실제로 어떻게됩니까?

너무 미친가 아니면 바보 같은가요?

안부,

답변

1

사실

AD는 각 요청이 템플릿에서 HTML 렌더링되지만, 템플릿에 표시되는 데이터는 실제로 모든 시간이 필요하지 않는 경우, 당신은 할 수 이 같은 행동이나 조각 캐싱을 시도 : (http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)

+0

가 아주 좋은, @Ivan K.는 거기에 어떤 조언가 가이드 레일에

<div class="span3"> <% cache 'dashboard' do %> <%= render partial: 'charts/dashboard', layout: false %> <% end %> </div> 

당신은 자세한 내용을 읽을 수 있습니다 dev 모드에서 테스트 하시겠습니까? "렌더링"문을 캐시 블록 wo/success에 래핑했습니다. 캐시 매개 변수의 전체 경로를 사용해야합니까? – Arnauld

+0

앞뒤로, 캐시가 도움이되지 않는다고 생각하기 시작했습니다. 데이터베이스를 크롤링하는 부분 내부에 도우미 함수가 있습니다 ... 나는 이것을 수행하고 가까운 미래에 SPA로 이동해야합니다. 완전 아약스가이 트릭을 할 것입니다. – Arnauld

관련 문제