Мысли о программировании, жизни и христианстве.

Динамическая версия CSS и JS

Периодически приходится немного править каскадные таблицы стилей и скрипты на разных проектах. До сих пор я использовал следующее решение:

<link rel="stylesheet" href="/styles/main.css?<?php echo time(); ?>" />
<script src="/js/main.js?<?php echo time(); ?>"></script>

Где php-вставка подставляла текущее время и получался следующий код:

<link rel="stylesheet" href="/styles/main.css?1401823964" />
<script src="/js/main.js?1401823964"></script>

Это позволяло автоматически обновлять в браузере CSS и JS файлы с которыми работаю (борьба с кешированными версиями обновляемых файлов), создавая «разные» версии файлов, при каждой перезагрузке страницы. Но правильно ли так делать? Ведь даже если я ничего не менял, все равно браузер грузил все по новому.

Возможно, что лучше применять следующий алгоритм работы с кешем файлов такого типа:

  1. Берётся время последнего изменения файла.
  2. Сравнивается со временем указанным как версия файла (или с хранимыми где-то последними версиями файлов, которые используются).
  3. Если они равны, то ничего не меняется.
  4. Если не равны, то версия файла меняется на время последнего изменения файла (или старый файл заменяется новым).

Стоит ли вообще на этом заостряться? Или лучше воспользоваться одним из решений предложенных в дополнительных материалах или предложенным выше (вторая ссылка вроде предлагает решение по этому алгоритму)?

Дополнительные материалы

Умное Кеширование и Версионность в Javascript/CSS
(en) Automatic merging and versioning of CSS/JS files with PHP
(en) Automatic versioning of CSS, JavaScript and Images
(en) Simple CSS/JS Concatenation and Versioning with PHP
(en) Automating JS and CSS Versioning
(en) Make your pages load faster by combining and compressing javascript and css files

Поделиться
1 комментарий
Андрей 2019

Спасибо за статейку!