У меня есть сайт django с большим количеством javascript, но у моих клиентов ужасная связь - как оптимизировать? - PullRequest
2 голосов
/ 06 августа 2009

Мы предоставляем услугу django для некоторых клиентов, использующих очень плохую и прерывистую связь. Спутниковое и GPRS-соединение в тех частях Африки, которые не получили выгоды от недавнего выхода из строя волоконно-оптических кабелей.

Я консолидировал javascripts и использовал минифицированные версии, пытался очистить таблицы стилей, а что нет ...

Как хороший разработчик django, я позволяю apache обрабатывать всю статическую информацию, такую ​​как css, JS и другие статические носители. Я включил модули Apache deflate (для gzip) и expired, чтобы попытаться минимизировать повторную передачу пакетов javascript (в основном это огромная стоимость jQuery). Я также включил промежуточное программное обеспечение gzip от django (но, похоже, это мало помогает в сочетании с дефлятом apache).

Основной вопрос - что еще нужно сделать, чтобы оптимизировать использование полосы пропускания?

  • Есть ли в заголовках оптимизация django или что не нужно делать, чтобы "уже просмотренные данные" не передавались по сети?
  • Кажется, что структура кэширования django ориентирована на оптимизацию сервера (свести к минимуму попадание в базу данных) - как это переходит на фактическое использование полосы пропускания?
  • Какие еще настройки Apache существуют, чтобы браузер не пытался получить данные, которые у него уже есть?

Ответы [ 3 ]

1 голос
/ 06 августа 2009

Некоторые из ваших оптимизаций важны для улучшения производительности вашего сервера, но не путайте их с оптимизацией использования полосы пропускания. Другими словами, gzip / deflate являются релевантными, но Apache, обслуживающий статическое содержимое, не имеет значения (даже если это важно).

Теперь для решения вашей проблемы вам нужно рассмотреть три вещи: сколько данных отправляется, сколько соединений требуется для получения данных и насколько хороши соединения.

В большинстве случаев первая область покрыта с помощью deflate / gzip, expires, минимизации javascript и т. Д., Поэтому я могу добавить только одну или две вещи, о которых вы можете не знать. Во-первых, вам следует перейти на Django 1.1, если вы этого еще не сделали, потому что он лучше поддерживает заголовки ETags / Expires для ваших представлений Django. Возможно, у вас уже есть эти заголовки, работающие должным образом для статических данных из Apache, но если вы используете более старый Django, они (вероятно) не будут правильно установлены в ваших динамических представлениях.

Для следующей области, количества соединений, вам необходимо объединить файлы javascript и css в как можно меньшее количество файлов, чтобы уменьшить количество соединений. Также очень полезным может быть объединение ваших файлов изображений в одно «спрайтовое» изображение. Существует несколько проектов Django для решения этого аспекта: django-compress , django-media-bundler (единственный, который создает спрайты изображений), и вы также можете увидеть этот SO ответ .

Для последней области того, насколько хороши соединения, вы должны посмотреть на глобальный CDN, как предложено Алексом, или, по крайней мере, разместить свой сайт у интернет-провайдера ближе к вашим пользователям. Это может быть сложно для Африки, которая, по моему опыту, не может даже получить приличную связь с европейскими интернет-провайдерами (по крайней мере, южная Африка ... северная Африка могла бы быть лучше).

1 голос
/ 06 августа 2009

Вы можете делегировать jQuery в CDN, который может иметь лучшую связь с Африкой, например, google (и это бесплатный сервис! -). Кроме этого, я рекомендую что-нибудь каждое написанное (или произнесенное на видео, есть много такого!) Steve Souders - хотя его выступления, книги и эссе неоценимы для КАЖДОГО веб-разработчика, я думаю, что они особенно ценно для тех, кто обслуживает аудиторию с низкой пропускной способностью (например, один из его советов в его последних книгах и выступлениях о значительной части браузеров в мире, НЕ получающих преимущества сжатия от deflate или gzip - речь идет не столько о самих браузерах , но прокси и брандмауэры делают что-то не так, поэтому «ручное сжатие» все равно важно!).

0 голосов
/ 06 августа 2009

Это определенно не та область, в которой я имел большой опыт, но изучение ConditionalGetMiddleware Джанго может оказаться полезным. Я думаю, что это может помочь вам решить первый из ваших пунктов пули.

РЕДАКТИРОВАТЬ: Это может быть хорошим местом для начала: http://docs.djangoproject.com/en/dev/topics/conditional-view-processing/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...