2012-04-09 3 views
2

장고에서보기에는 "반 다이나믹"이 있습니다. 제 경우에는 처음 방문자와 재 방문자에게 다른 내용을 제공합니다. 내보기는 응답을 렌더링하기 전에 모든 종류의 논리를 실행할 수 있지만 쿠키 (세션 데이터 또는 사용자 데이터)에 따라 다른 유형의 사용자가 다른 응답.Django의 준 동적 뷰 캐싱

나는 이것을 구현하기 위해 몇 가지 옵션을 생각하고 :

  • 리디렉션 내보기에서 캐시 다른보기로. UX (URL 변경)에 영향을주기 때문에이 방법이 맘에 들지 않습니다. HTTP 서버 수준에서 캐시를 원한다면 그 접근 방식을 선택할 필요가 있다는 것을 알고 있습니다.
  • 캐시 태그를 사용하여 템플릿 수준에서 캐시합니다 (전체 템플릿을 실제로 캐시 할 수 있음, 발끝까지). 그런 식으로 각 사례마다 다른 템플릿을 사용할 수 있습니다. 그것은 괜찮은 접근 방식입니다. 아마도 템플릿 엔진을 실행하는 것입니다.이 템플릿 엔진은 오히려 피해야 할 대상입니다.
  • 캐싱 프레임 워크를 직접 사용하여 뷰에서 준비 HttpResponse 개체를 캐시하십시오. 실질적으로 이것은 최상의 성능을 제공하는 것처럼 들리지만, "바퀴를 재발 명"하는 것처럼 느껴집니다.

다른 아이디어? 제가 실종시킨 표준 방법 은요?

답변

2

동적 응답을 처리 할 때 캐시 템플릿 태그를 사용하는 것이 가장 좋습니다. 로그인 한 사용자, 세션 저장소 등을 변경하는 경우 언제든지 전체 응답을 캐시 할 수 없습니다. 템플릿의 변경되지 않은 비트를 캐시 템플릿 태그로 캐시하는 것이 가장 좋은 방법입니다. 그런 다음 적어도 실제 동적 부품 만 처리해야합니다.

+0

당연히 템플릿의 동적 부분은 캐시 될 수 없습니다. 필자의 경우 두 가지 옵션 만 제공하므로 완전히 동적 인 것은 아닙니다. 전체보기 캐시와 같이 완전히 캐시 할 수 있다면 기분이 좋을 것입니다. – zvikico

+0

보기 내부에서 캐시 API *를 사용하여 쿼리 세트 등을 캐시 할 수 있으며 캐시 템플릿 태그를 사용하여 HTML의 일부를 캐시 할 수 있지만 전체보기 (데코레이터 중 하나 사용)를 캐시하면 응답 완전하게 구성된 HTML 문서를 포함하는 자체가 캐시됩니다. 따라서 페이지의 일부분을 변경해야하는 경우보기 캐싱이 해제됩니다 (인증과 같이 변경할 수있는 항목에 의존하지 않는 한). –

+0

아마도 내 질문에 명확하지 않았습니다. 예를 들어 몇 주 전에 AWS CloudFront에서 소개 한 동적 콘텐츠 캐싱을 사용할 수 있습니다. http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html – zvikico

1

또는 페이지를 캐시하고 동적 인 페이지 비트를 변경할 수 있습니다. 이는 two-phased-rendering을 사용하여 수행 할 수 있습니다.