Почему CSS и JS не должны проходить через Django? - PullRequest
6 голосов
/ 26 мая 2011

Согласно этому ответу на Можно ли сжать файлы JavaScript и CSS в Django? :

Ваши CSS и JS не должны проходить через Djangoв вашей производственной системе.Вам нужно настроить Apache (или Nginx, или любой другой) для их обслуживания, и когда вы это сделаете, вы сможете настроить сжатие gzip там, а не в Django.

Ответы наэтот вопрос не объясняет причину этого требования / совета.Является ли это хорошей практикой для скорости, когда статический контент (изображения / CSS / JS) подается с другого сервера?Или есть что-то еще?

Ответы [ 3 ]

11 голосов
/ 26 мая 2011

Apache и Nginx работают быстрее, чем Django (потому что они делают намного меньше и намного проще). Таким образом, обслуживание CSS и JS с Django - пустая трата ресурсов.

Хотя «должен» здесь слишком сильный, ИМО. «Должно, если у вас высокий трафик», а точнее.

3 голосов
/ 26 мая 2011

Содержимое, обслуживаемое веб-сервером, можно разделить на две категории:

  1. Статическое
  2. Динамическое

Статические файлы (CSS /JS / Img ...) обычно не изменяется (т. Е. Их можно прочитать с диска и отправить клиенту. ( Предварительная обработка не требуется до нажатия )

ДинамическийФайлы (ваши динамические html-страницы) обычно необходимо обрабатывать различными способами (данные БД + обработка формы + сообщения ...) и отправлять клиенту.

Когда вещь не меняется и остается неизменнойдля любого пользователя не назначайте эту работу веб-платформе (ее дополнительное бремя), пусть веб-сервер обрабатывает ее .

2 голосов
/ 27 мая 2011

В производственных средах у вас уже есть реальный http-сервер, который подключается к django (через mod_python, fcgi или wsgi), поэтому здравый смысл - обслуживать файлы непосредственно с него.

Этоотправит ответы быстрее:

  • , когда вы обслуживаете статический файл через правильно настроенный apache или nginx, издержки будут минимальными.По запросу сервер проверяет, существует ли файл по указанному пути, затем отправляет его в браузер (конечно, добавляя несколько заголовков).
  • когда вы обслуживаете статический файл через django, настроенный через apache или nginx, сначала веб-сервер подключается к django, затемdjango обрабатывает вещи более сложным образом:
    • создает объект запроса,
    • запускает совпадения urlpatterns REGEXP до тех пор, пока не находит строки, отвечающие за статические,
    • запускает некоторый статический обслуживающий код, который отправляет его обратнопользователю ...

Это будет потреблять гораздо меньше ресурсов:

  • каждый процесс django потребляет МНОГО памяти, примерно в 10 раз больше, чем тот женастроенный процесс apache, обслуживающий тот же статический файл,

Он будет масштабироваться лучше:

  • правильно настроенный nginx может обрабатывать в 100 раз больше запросов, потребляя гораздо меньше ресурсов процессора и памяти ...

Он может быть передан на аутсорсинг:

  • , хотя написано, что вам нужно настроить apache или nginx, но не можете - вы можетепередайте эти файлы таким службам, как Amazon S3 или Google API, чтобы js & css была «ближе» к пользователям, и в случае, если такие службы, как Google API, есть вероятность, что библиотека, которую вы хотите добавить (например, jQuery), уже кэшируется в браузере пользователя.

Все эти вещи, сложенные вместе, просто сделают ваш сайт загруженным быстрее .

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