Автоматическое управление версиями статического контента - PullRequest
5 голосов
/ 12 октября 2009

Я разрабатываю сайт PHP, который обслуживает статический контент из домена без файлов cookie (спасибо, блог!), Этот домен обслуживает контент с высоким кешем, что, помимо прочего, означает, что я не могу изменить контент (JS CSS и изображения) без аннулирования этого кэша. В настоящее время я делаю это, добавляя? Revision (например, style.css? 19) к концу статического URL, в настоящее время я делаю это вручную, что, очевидно, далеко не удобно.

Каким будет рекомендуемый способ выполнить это? Я использую Subversion, и, насколько я понимаю, есть различные инструменты, которые я могу использовать, чтобы получить номер ревизии - но как мне поступить с этим в PHP (кажется, не очень разумно выполнять эту загрузку каждой страницы?). Я предполагаю, что мне, скорее всего, стоит использовать какую-то систему сборки.

Любые рекомендации будут с благодарностью.

Спасибо

Ответы [ 3 ]

3 голосов
/ 12 октября 2009

Подстановка ключевых слов SVN может быть решением. Вы бы использовали это так: сначала добавьте следующий код в ваш PHP-код, где-то рядом с местом, где вы хотите использовать версию. Как это:

$svn_version = '$Revision$'; // remember to use single quotes!

Теперь зафиксируйте этот файл. А затем снова откройте его. Обратите внимание, что вышеприведенная строка изменилась и теперь выглядит примерно так:

$svn_version = '$Revision: 66232 $';

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

Теперь вам просто нужно немного поработать со строкой, чтобы получить это число из этой строки. Я уверен, что вы сами можете это понять.

Конечно, это не будет работать, когда вы обновляете фактические файлы css / js, не касаясь PHP. И это не может быть легко решено. Вы можете изменить PHP каждый раз, когда вы меняете CSS / JS. Или да, вы могли бы пойти на какую-то систему сборки.

В любом случае, я надеюсь, что у вас есть некоторые идеи из этого.

2 голосов
/ 13 октября 2009

Существует отличный PHP-скрипт и набор .htaccess, которые можно использовать для управления версиями файлов CSS / Javascript. Он работает, перезаписывая все запросы CSS / JS в файл comb.php, который затем проверяет, был ли файл изменен. Если это так, он создает новую кэшированную версию файла. Если он не был изменен, он может просто отправить ранее кэшированную версию файла. Этот сценарий также позволяет минимизировать количество http-запросов, что является еще одним улучшением производительности.

Изображения сложнее - на базовом уровне вы можете искать / заменять в файлах CSS имена изображений и обновлять их. Это может быть включено в скрипт сборки. SASS - это система обработки CSS, которая поддерживает переменные в CSS, что означает, что вам нужно будет обновлять имена изображений только в одном месте.

Наконец, я заметил, что при использовании такого инструмента, как Fiddler , если строка запроса включена в запрос, браузер может игнорировать заголовки expires и в любом случае связаться с сервером, поэтому может быть лучше поместить в подкаталог, то есть вместо

/css/main.css?16

/css/16/main.css
1 голос
/ 12 октября 2009

Идея состоит в том, чтобы иметь текстовый файл, который содержит только номер (то есть номер редакции). При каждом обновлении вы увеличиваете это число (как идентификатор версии SVN или просто как счетчик, как хотите).

Итак, вы просто продолжите, как вы предложили; Вы читаете число в файле и передаете его как аргумент GET своим CSS или другим файлам. Одна реализованная, вам нужно просто обновить номер ревизии (и, возможно, очистить кеш, если вы его используете), чтобы обновить на каждой странице. Довольно просто:)

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