2012-07-30 2 views
0

레일 3.2 응용 프로그램에서 개발을 맡고 있으며 페이지 로딩 시간을 향상시키는 가장 좋은 방법을 찾고 있습니다. 사이트 자체는 실제 웹 응용 프로그램 (사이트가 서핑 라이프 스타일 커뮤니티 사이트 인 http://korduroy.tv/)보다 큰 동적 웹 사이트이며 사용자가 다른 두 개의 작은 부분이 있지만 대부분의 사이트는 모든 사람에게 동일한 경험.주로 정적 인 사이트의 성능 전략

페이지로드 시간이 매우 느리고 서버 로그를 보면 각 페이지가 너무 많은 동적 콘텐츠를로드하고있는 것 같습니다 (예 : 대부분의 페이지가 10 개 이상의 모델에서 리소스를로드 중임). 내가 할 수있는 것을 거쳐 리팩터링 할 수 있기를 기대하면서 기본적인 성능을 얻으 려합니다. 대부분의 사이트가 모든 사용자에게 동일하다는 것을 알면 서버에 콘텐츠를 적극적으로 저장하거나 일종의 백그라운드 작업을 통해 생성 된 정적 콘텐츠를 제공 할 수있는 방법일까요?

초기 생각은 Jekyl과 같은 정적 사이트 생성기를 사용하는 작업을 만들고 기본적으로 사이트의 정적 복사본을 만들어서 cdn에서 제공 할 수있었습니다. 내 직감은 이것이 아마도 그렇게 할 방법이 아니라고 말하고 플러스 거기에 동적으로 제공 해야하는 일부 페이지 (예 : 사용자 프로필 페이지)입니다.

모든 권장 사항이 우수 할 것입니다. 면책 조항, 프런트 엔드 영역에서 왔으며 서버 측 최적화와 관련하여 모범 사례에 대한 지식이 거의 없습니다. 감사!

+0

fwiw, 사용자 관점에서 보면 페이지로드 시간이 그리 나쁘지 않습니다. 여전히 반응이 좋으며 링크를 클릭하면 다음 페이지가로드되기를 기다리지 않습니다. 특히 나쁜 페이지 (newrelic rpm이이를 발견하는 데 도움이 될 수 있음)가 있으면 쿼리가 느려지거나 색인이 누락 될 수 있습니다. –

답변

1

당신이 쓴 것을 보면, 가장 큰 이득은 memcache 저장소를 사용하여 조각 캐시를 구현하는 것입니다. 레일 캐싱에 대한 최종 안내서는 http://guides.rubyonrails.org/caching_with_rails.html을 참조하십시오.

홈페이지 (사용자)에 의존하지 않는 일부 콘텐츠에 대해 페이지 캐시 또는 액션 캐시를 사용하지 못하게 될 수도 있지만, 하루에 수백만 건의 요청을 처리하지 않는 한, 이것이 필요한지 확실하지 않습니다.

레일스 자산 파이프 라인에 따라 javascript와 css가 컴파일되는 것처럼 보이지만 이미지에는 리소스에 대한 공격적인 브라우저 캐싱을 허용하는 sha1 해시가 없습니다 (내용에 대해 걱정할 필요가 없기 때문에). 이미지를 바꿀 때 새로운 해시를 얻음에 따라 변경됨). 여기서 핵심은 자산 파이프 라인을 활성화하여 자산의 일부를 배포 (rake assets:precompile)로 컴파일하고 image_tagasset_path 도우미 (image-url sass 도우미)를 사용하는 것입니다. 또한 nginx가 페이지를 새로 고칠 때 브라우저에 코드 304 (수정되지 않음)로 응답하는지 확인하십시오. 레일 서버의로드에 영향을 미치지는 않지만 (nginx와 레일이 같은 서버에서 실행되지 않는 한) 평균 페이지로드 시간은 줄어 듭니다.

SQL 쿼리를 캐싱하거나 최적화하는 것과 같은 고급 기술을 살펴볼 수도 있지만 복잡성이 증가하여 코드베이스를 유지 관리하기가 어려워 질 수 있습니다. 먼저 캐싱보기를 시도하고 허용되는 수준으로로드 시간을 가져올 지 확인하십시오.

+0

대단한 답변을 해주신 Ben에게 감사드립니다. 그리고 자산 파이프 라인을 잘 파악하고, 나는이 코드베이스를 상속 받았으며 이전에 그것을 보았지만 완전히 잊어 버렸습니다. 당신이 추천 한 모든 것을하고 거기에서 가져갈 것입니다. –

관련 문제