2009-08-06 1 views
2

우리는 정말 가난하고 간헐적 인 연결을 사용하는 일부 클라이언트를 위해 장고 서비스를 호스팅하고 있습니다. 최근의 광케이블로 인해 착륙하지 않은 아프리카 지역의 위성 및 GPRS 연결성.나는 자바 스크립트를 많이 사용하는 장고 사이트를 가지고 있지만 고객은 끔찍한 연결성을 가지고 있습니다 - 최적화 방법은 무엇입니까?

내가 자바 스크립트를 통합 한 및 버전을 minificatied 사용, 스타일 시트를 정리하려고하고 ... 좋은 장고 구현처럼

, 내가시키는 아니에요 아파치는 같은 모든 정적 인 정보를 제공 무엇 CSS 및 JS 및 기타 정적 미디어. 아파치 모듈 deflate (gzip 용)과 expired (jQuery의 막대한 비용) 자바 스크립트 패키지의 재전송을 최소화하려고했습니다. 또한 django의 gzip 미들웨어를 사용할 수 있습니다 (하지만 아파치의 수축과 함께 많은 것을하지는 않습니다).

주요 질문 - 대역폭 사용을 최적화하기 위해 수행해야 할 다른 작업은 무엇입니까?

  • 헤더에 장고 최적화가 있습니까? 아니면 "이미 본 데이터"가 네트워크를 통해 이동하지 않도록하려면 어떻게해야합니까?
  • django 캐싱 프레임 워크는 서버 최적화 (데이터베이스 충돌 최소화)로 맞춰진 것처럼 보입니다 - 실제로 대역폭 사용으로 변환되는 방법은 무엇입니까?
  • 브라우저가 다른 데이터를 가져 오지 않도록하기 위해 아파치에 어떤 다른 조정이 있습니까?
+2

페이지를 프로파일 링하기 위해 방화 광 또는 사파리의 개발자 모드를 사용하셨습니까? 그들은 다른 요소 (js/html/images/css/etc)의 실제 시간 및 대역폭 비용을 결정하는 좋은 도구입니다. Firebug 용 Yslow 플러그인은 손쉬운 프로파일 링 도구이기도합니다. – Mark

답변

1

당신의 최적화 중 일부는 사용중인 서버에서 더 나은 성능을 쥐어 짜기위한 중요하지만, 대역폭 활용을 최적화 그들을 혼동하지 마십시오. 즉, gzip/deflate는 관련이 있지만 Apache에서 제공하는 정적 컨텐츠는 중요하지 않습니다.

이제는 문제를 해결하기 위해 데이터 전송량, 데이터를 가져 오기 위해 필요한 연결 수 및 연결 상태를 확인해야합니다.

대부분 deflate/gzip을 사용하여 첫 번째 영역을 덮고 만료, 자바 스크립트 최소화 등을하므로 알지 못하는 것들을 하나만 추가 할 수 있습니다. 먼저 Django 뷰에 ETags/Expires 헤더가 더 잘 지원되므로 Django 1.1로 업그레이드해야합니다. 아파치의 정적 데이터에 대해 이미이 헤더가 제대로 작동하고 있을지 모르지만 이전 Django를 사용하고 있다면 아마도 동적 뷰에서 올바르게 설정되지 않은 것입니다.

다음 연결 영역의 경우 연결 수를 줄이기 위해 가능한 한 파일에 자바 스크립트 및 CSS 파일을 통합해야합니다. 또한 이미지 파일을 단일 "스프라이트"이미지로 통합하는 것이 매우 유용합니다. 이 aspect를 다루기위한 Django 프로젝트가 몇가지있다 : django-compress, django-media-bundler (이미지 스프라이트를 생성 할 유일한 것)이고, this SO answer을 볼 수도있다.

가장 좋은 연결 영역은 Alex가 제안한대로 글로벌 CDN을 보거나 사용자와 가까운 ISP의 사이트를 호스팅해야합니다. 내 경험으로 보면 유럽 ISP (적어도 남부 아프리카 ... 북부 아프리카가 더 좋을 수도 있음)에 제대로 연결될 수없는 아프리카의 경우 힘들 수 있습니다.

1

아프리카와의 연결성이 좋은 CDN (예 : google)에 jQuery를 위임 할 수 있습니다 (무료 서비스입니다!). 저 이외에 나는 모든 서면 (또는 비디오로 말하면, 그것도 많다!)을 Steve Souders에 의해 추천한다 - 그의 대화와 서적과 에세이는 모든 웹 개발자에게 소중한 반면, 나는 그들이 저조한 사람에게 특히 소중하다는 것을 생각한다. (예를 들어 최신 책과 회담에서 그의 조언 중 하나는 풍선 브라우저 나 압축 풀기 프로그램에서 압축 효과를 얻지 못하는 세계 브라우저의 상당 부분에 관한 것입니다. 브라우저 자체에 관한 것이 아니라 프록시와 방화벽에 관한 것입니다 문제가 있으므로 "수동 압축"이 중요합니다!).

0

이것은 많은 경험이있는 분야는 아니지만 Django의 ConditionalGetMiddleware을 살펴보면 유용 할 수 있습니다. 나는 그것이 당신이 당신의 총알 포인트의 첫 번째 문제를 해결하는 데 도움이 될 것이라고 생각합니다.

편집 :이 좋은 장소를 시작할 수 있습니다 : http://docs.djangoproject.com/en/dev/topics/conditional-view-processing/