Каковы плюсы и минусы в обслуживании CSS и JavaScript с помощью системы шаблонов Django - PullRequest
3 голосов
/ 24 августа 2011

Часто я сталкиваюсь со сценариями, в которых, как мне кажется, имеет смысл использовать теги шаблонов в файлах CSS и JavaScript, такие как использование {{STATIC_URL}} в CSS для доступа к изображению.Я понимаю, что единственный способ добиться этого - использовать файлы CSS и JavaScript, обслуживаемые Django.Я заинтересован в этом подходе.Но прежде чем я сделаю это, я хочу услышать от вас опыт экспертов.Каковы плюсы и минусы этого подхода?Thx.

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Плюсы:

  • Вы можете принимать множество решений по запросу о том, как все выглядит и ведет себя.
  • Вы можете хранить количество различных файлов CSS / JS наминимум.

Минусы:

  • Браузеры стремятся агрессивно кэшировать CSS и JS, поэтому вам придется использовать некоторые агрессивные методы анти-кэширования.Конечно, это означает отключение кэширования для некоторых / всех статических файлов.
  • Каждый запрос CSS и JS будет использовать другой поток вашего сервера WSGI.В обычном цикле запроса / ответа каждый запрос обычно занимает один поток;по крайней мере, вы фактически утроили это, так что теперь ваше приложение, которое может обрабатывать 200 одновременных запросов, теперь может обрабатывать только 66.
  • Когда ваш сайт становится большим, CDN, вероятно, не сможет вам помочь.

Альтернативы:

  • Настройте CSS с помощью javascript и установите переменную javascript внутри шаблона страницы для управления настройками.
  • Использование нескольких файлов CSS и управлениеих включение динамически.
  • Генерирует статические файлы по мере необходимости, но затем кэширует их на диск и передает их через mod_xsendfile.Это работает только в том случае, если вы обслуживаете статические файлы, откуда процесс django может записывать, например, на той же машине или в сети.
0 голосов
/ 25 августа 2011

Лично я придерживался совета команды Django делать статические файлы CSS и JavaScript, обслуживаемые непосредственно сервером, а не через Django.Это не было проблемой и упростило многие вещи.Как правило, в любое время, когда я думаю, что мне нужен динамический файл CSS или JS, есть способ рефакторинга, поэтому я не делаю.

Например:

использование {{STATIC_URL}} в CSS для доступа к изображению

Я не уверен, какова переменная вашего {{ STATIC_URL }}, но я обнаружил, что использование тега <base> на моих страницах исправляет многие вещи.Я предполагаю, что это для фоновых изображений?Не могли бы вы обновить свой вопрос, чтобы привести пример?

Еще одна вещь, которую я сделал, - если мой JavaScript требует динамических данных, я помещу большую часть кода в библиотеку JavaScript, которую я выполняю как статический файл изатем поместите минимальный динамический материал в тег <script> в конце страницы.Обычно я помещаю все это в объект (очень похожий на JSON), а затем просто передаю этот объект в функцию.Если подумать, вы можете просто взять все динамические вещи, сделать из них словарь в функции представления, закодировать его в JSON и передать через контекст.Тогда ваш шаблон страницы выглядит примерно так:

<html><head>
...
<script src="{{ STATIC_URL }}/js/foo.js"></script>
...
</head><body>
...
<script>
    foo_main({{ foo_params_json|safe }});
</script>
</body></html>

Это упрощает повторное использование этого кода лот .

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