2013-04-30 5 views
2

필자는 Rails 앱에서 러시아 Doll 조각 캐싱을 실험하고 있는데, 특히 주요 대시 보드 페이지에서 캐싱합니다. 이것은 사용자가 로그인 한 후 사용자가 볼 수있는 첫 번째 페이지이며 많은 중첩 요소가 포함되어 있으므로 러시아 인형의 가장 적합한 후보입니다.Russian Doll 캐싱을 사용하여 캐시를 따뜻하게 유지하는 방법은 무엇입니까?

캐싱은 사용자가 대시 보드를 다시 렌더링해야하는 변경 작업을 할 때 잘 작동합니다. 캐싱을 통한로드 시간은 전체 페이지를 렌더링하는 것보다 약 4 배 빠릅니다.

그러나 시스템에 의해 데이터가 변경되는 경우가 있습니다. 예를 들어, 매일 밤, 전날의 새로운 환율로 모든 값을 업데이트합니다. 그러면 대시 보드의 대부분 조각이 자동으로 만료되고 사용자는 로그인 할 때 콜드 캐시에 도달하게됩니다.

시스템을 업데이트 한 후에 이러한 조각 캐시를 재생성하여 웜을 따뜻하게 유지할 수 있습니까? 난 수동으로 write 어떤 시스템 업데이트 후 조각을 추측 할 수 있지만 수동으로뿐만 아니라 키 및 종속성을 관리 할 것이다. (저는 현재 cache_digest 젬을 사용하고 있습니다. 매우 편리합니다.).

아이디어가 있으십니까?

답변

1

데이터 속성에 계산에 필요한 모든 데이터를 포함시킨 다음이를 자바 스크립트를 사용하여 텍스트로 변환 할 수 있습니다.

그래서 원시 출력 할 수 있습니다

<li data-gbp-amount="2.50"></li>

이 그럼 당신은 JS와 함께 와서 같은 것을 수행

$(document).find("[data-gbp-amount]").each(index, el) -> 
    $(el).text($(el).data("gbp-amount") * todaysExchangeRate) 

레일에 의해 출력 모든 것이 캐시됩니다 그런 식으로, 그리고 원 환율로 변경하지 마십시오.

+0

확실히 작은 요소에도 적용됩니다. 나는 DHH가 그의 원래 포스트에서 유사한 것을한다고 믿습니다. 그러나 우리의 경우 변경에는 더 복잡한 계산이 포함될 수 있으며 (환율뿐 아니라) 전체 조각이 포함되거나 제거 될 수 있습니다. 나는 아직도 그것을 할 수 있다고 생각하지만 JS로 너무 많은 로직을 옮겨야 할 것이다. – Luciano

0

모두는 cache_key에 따라 다릅니다. cache_key는 모델 ID, updated_at 속성 및 HTML 템플리트의 md5를 기반으로합니다. 따라서이 3 개의 키 중 하나를 변경하면 캐시가 만료되었습니다.

데이터가 얼마나 복잡한 지 알지 못하지만 캐시 키를 변경하기 위해 기본 AR :: 모델에서 터치 방법을 사용할 수 있습니다. 어쩌면 당신은 다른 기록이 부양 가족 인 AR :: 모델을 가지고있을 것입니다.

+0

감사합니다 Rinaldi. 객체를 만지면 효과적으로 캐시가 만료되므로 사용자는 다음 액세스시 콜드 캐시에 도달하게됩니다. 실제로이 작업을 수행하려고했지만 새 캐시가 준비되어있어 사용자가 대신 사용할 수 있습니다. – Luciano