Обновление путей к ресурсам (CSS / JS) при изменении файлов в Subversion - PullRequest
1 голос
/ 23 ноября 2010

Время от времени я получаю отчеты о странностях макета от людей, использующих мои сайты, и ответ, как правило, обновляет ваш браузер с помощью Ctrl-F5 / очищает ваш кеш.

Самый простой способ справиться с этим - добавить ревизию SVN к путям к таким ресурсам, как этот styles.css?1234, но мне интересно, не слишком ли это сложно (например, ревизии SVN, которые не изменяют ресурс) заставит ненужную выборку). Кроме того, требуется пройти и найти все эти пути и добавить некоторый код для вывода версии SVN.

Есть ли лучший / стандартный способ справиться с этим?

Для чего я стою, я использую Django и Apache с mod_wsgi.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Было бы лучше использовать отметку времени последнего изменения файла.Тогда вы избежите проблем, с которыми столкнетесь с номером версии.При каждом запросе вам также придется либо идти на диск, чтобы получить последний номер ревизии (используйте кеш при использовании этого подхода), либо изменять инструкции включения в шаге «компиляции» при развертывании.

Кроме того, если выdo styles.css?123 некоторые прокси / браузеры могут вообще не кэшировать файл независимо от заголовков срока действия.Лучше сделать styles.123.css, который все агенты обрабатывают как отдельный файл.

Есть проект, который уже решает эту проблему, и я использовал его с большим успехом: django-compress.Вы сообщаете ему, как вы хотите сжать ваш javascript и css, затем он минимизирует / сжимает, объединяет их в один большой файл и дает большому файлу специальное имя файла, которое включает метку времени.Вы также получаете тег шаблона для использования при включении файлов, которые знают, какой файл включать.

Django 1.3 также будет включать приложение под названием staticfiles , которое помогает обслуживать статические носители, ноне решает проблему управления версиями.

0 голосов
/ 23 ноября 2010

Одна из техник, которую я использовал в прошлом, заключается в том, чтобы использовать тег шаблона для каждой ссылки на статический ресурс. Затем я могу изменить этот тег по мере необходимости, как при необходимости изменить URL-адрес каталогов ресурсов, так и при необходимости добавить очистку кеша при необходимости.

Я бы не стал беспокоиться о принудительном получении ненужной выборки для каждой ревизии SVN, даже если файл не изменился - это все же более эффективно, чем каждый раз предоставлять новую.

Существуют различные библиотеки, которые делают такие вещи для вас. Кнутин уже упоминал django-compress, есть также django-static-management , django-static и, возможно, множество других. В дополнение к работе с кэшем, эти приложения обычно включают в себя своего рода сжатие / конкатенацию, так что несколько файлов CSS или JS объединяются в один для уменьшения HTTP-запросов.

...