[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: автоматическая смена версии css js
VELIK505
Надоело при введение в проект новых фишек/правок и стилей постоянно прописывать руками:
href="./css/style.css?r320"
src="./js/page_load.js?r83"
......

Как можно сделать чтобы при залитии(изменений файла) версия добавлялась +1 автоматом и не надо было никуда лезть и руками менять?
У всяких вк и тд вообще по 10 раз на дню может чёто допиливаться перезаливаться:
src="/js/lang0_0.js?6693"

не думаю что они руками прописывают(накидывают +1 к версии)
AllesKlar
Цитата
href="./css/style.css?r320"

Как я понимаю, это чтобы был коректный кеш в браузере?
А сам файл статичный на сервере?
Как вариант, хранить в базе хеш файла. если не совпадает с реальным хешем, то обновляем в базе хеш, а в темплейт шлем +1
Либо вообще, в темплейт слать не r320, а первые N символов хеша.
Тогда и в базе ничего хранить не надо.

_____________
[продано копирайтерам]
VELIK505
Да это чтобы новые изменения юзеры видели сразу а не из кеша. При добавлении версии (?r22) получаеться как бы новый url на css/js соответветственно как бы новый css/js -> браузер запрашивает css/js с сервера заного а не из своего кеша.
Да на сервере храниться статические файлы сами.
Твои решения не подходят. Я буду хеш с базой сравнивать каждую секунду чтоли чекать?
А чё темплейт. Хеш может и совпасть. Есть какие то более простые решения.
SerginhoLD
брать дату/метку времени изменения файла и подставлять динамически, уж если постоянно проверять нужно

_____________
"internet explorer всех правильней отображает страницы" ©
AllesKlar
Цитата (VELIK505 @ 17.01.2016 - 18:21)
А чё темплейт. Хеш может и совпасть. Есть какие то более простые решения.

Всмысле? Куда еще проще?
Совпасть может, конечно, теоретически.

Как-то так имелось ввиду:
$css_file = 'css/styles.css';
$css_file_hash = hash_file('sha256', $css_file);
....
<
link rel="stylesheet" type="text/css" href="<?= $css_file . '?' .$css_file_hash ?>">


_____________
[продано копирайтерам]
TMake
VELIK505 добавь в конфиге параметр версии и от этого бери делай хеш и подставляй во все стили и скрипты.
VELIK505
Цитата (AllesKlar @ 18.01.2016 - 20:27)
Цитата (VELIK505 @ 17.01.2016 - 18:21)
А чё темплейт. Хеш может и совпасть. Есть какие то более простые решения.

Всмысле? Куда еще проще?
Совпасть может, конечно, теоретически.

Как-то так имелось ввиду:
$css_file = 'css/styles.css';
$css_file_hash = hash_file('sha256', $css_file);
....
<
link rel="stylesheet" type="text/css" href="<?= $css_file . '?' .$css_file_hash ?>">

Я тебя понял. Самое простое конечно решение.
Но тут видишь ты постоянно сверяешь.
А надо именно 1 раз при изменении файла чекнуть (а не постоянно) и если изменился он то накинуть r+1.
Gram
Делай проверку хэша файла css и js в папках "update" и в продакшэне, сравнивай, если разные хэши, то перезапись, +1 в переменную версии, и флаг в конфиг, что проверку обновления делать не надо. Когда надумаешь обновить дизайн, в конфиге ставишь проверку в true, предварительно положив обновленные css js в "update". Никаких md5 на каждый запрос! PHP должно жрать проц исключительно 1 раз при изменении версии css и js, и не забудь блокировку на отдачу этих css и js в момент перезаписи сделать, битые файлы не отдаются.
Invis1ble
https://ru.wikipedia.org/wiki/HTTP_ETag
думаю, для какого-нибудь nginx есть соответствующие модули

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

VELIK505
Цитата (Invis1ble @ 19.01.2016 - 21:21)
https://ru.wikipedia.org/wiki/HTTP_ETag
думаю, для какого-нибудь nginx есть соответствующие модули

такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.
Invis1ble
Цитата (VELIK505 @ 20.01.2016 - 02:30)
Цитата (Invis1ble @ 19.01.2016 - 21:21)
https://ru.wikipedia.org/wiki/HTTP_ETag
думаю, для какого-нибудь nginx есть соответствующие модули

такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.
VELIK505
Цитата (Invis1ble @ 19.01.2016 - 22:42)
Цитата (VELIK505 @ 20.01.2016 - 02:30)
Цитата (Invis1ble @ 19.01.2016 - 21:21)
https://ru.wikipedia.org/wiki/HTTP_ETag
думаю, для какого-нибудь nginx есть соответствующие модули

такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.

а это тогда что?

он у меня включен. Но браузерам видимо по барабану.
если бы он на лету отдавал браузерам результат то такие как vk не докидывали бы версию в html ?r3222
Я могу чекать так же етаг и +1 к версии сss или js докидывать если етаг был изменён но это получается тоже самое что предложил AllesKlar. А надо токо разок чекнуть и докинуть версию при изменении. соответственно напрашивается вывод что vk при изменении/заливки файла и изменяют версию накидывают +1 к версии асинхронно разово. Либо при первом же запросе кем либо статического файла у которого изменился etag послать от nginx запрос на свои какие то скрипты и докинуть +1 к версии скрипта.
killer8080
Цитата (SerginhoLD @ 18.01.2016 - 23:56)
брать дату/метку времени изменения файла и подставлять динамически

+1
самое оптимальное решение почему то осталось незамеченным rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.