VELIK505
17.01.2016 - 18:26
Надоело при введение в проект новых фишек/правок и стилей постоянно прописывать руками:
href="./css/style.css?r320"
src="./js/page_load.js?r83"
......
Как можно сделать чтобы при залитии(изменений файла) версия добавлялась +1 автоматом и не надо было никуда лезть и руками менять?
У всяких вк и тд вообще по 10 раз на дню может чёто допиливаться перезаливаться:
src="/js/lang0_0.js?6693"
не думаю что они руками прописывают(накидывают +1 к версии)
AllesKlar
17.01.2016 - 19:10
Цитата |
href="./css/style.css?r320" |
Как я понимаю, это чтобы был коректный кеш в браузере?
А сам файл статичный на сервере?
Как вариант, хранить в базе хеш файла. если не совпадает с реальным хешем, то обновляем в базе хеш, а в темплейт шлем +1
Либо вообще, в темплейт слать не r320, а первые N символов хеша.
Тогда и в базе ничего хранить не надо.
_____________
[продано копирайтерам]
VELIK505
17.01.2016 - 20:21
Да это чтобы новые изменения юзеры видели сразу а не из кеша. При добавлении версии (?r22) получаеться как бы новый url на css/js соответветственно как бы новый css/js -> браузер запрашивает css/js с сервера заного а не из своего кеша.
Да на сервере храниться статические файлы сами.
Твои решения не подходят. Я буду хеш с базой сравнивать каждую секунду чтоли чекать?
А чё темплейт. Хеш может и совпасть. Есть какие то более простые решения.
SerginhoLD
18.01.2016 - 23:56
брать дату/метку времени изменения файла и подставлять динамически, уж если постоянно проверять нужно
_____________
"internet explorer всех правильней отображает страницы" ©
AllesKlar
19.01.2016 - 00: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 ?>">
_____________
[продано копирайтерам]
VELIK505 добавь в конфиге параметр версии и от этого бери делай хеш и подставляй во все стили и скрипты.
VELIK505
19.01.2016 - 23:14
Цитата (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.
Делай проверку хэша файла css и js в папках "update" и в продакшэне, сравнивай, если разные хэши, то перезапись, +1 в переменную версии, и флаг в конфиг, что проверку обновления делать не надо. Когда надумаешь обновить дизайн, в конфиге ставишь проверку в true, предварительно положив обновленные css js в "update". Никаких md5 на каждый запрос! PHP должно жрать проц исключительно 1 раз при изменении версии css и js, и не забудь блокировку на отдачу этих css и js в момент перезаписи сделать, битые файлы не отдаются.
Invis1ble
20.01.2016 - 01:21
VELIK505
20.01.2016 - 02:30
такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.
Invis1ble
20.01.2016 - 02:42
Цитата (VELIK505 @ 20.01.2016 - 02:30) |
такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.
|
VELIK505
20.01.2016 - 06:25
Цитата (Invis1ble @ 19.01.2016 - 22:42) |
Цитата (VELIK505 @ 20.01.2016 - 02:30) | такого модуля не может существовать т.к. nginx примет изменения только после reboot что сам понимаешь недопустимо. На лету nginx не сможет поменять заголовок браузеру.
|
|
он у меня включен. Но браузерам видимо по барабану.
если бы он на лету отдавал браузерам результат то такие как vk не докидывали бы версию в html ?r3222
Я могу чекать так же етаг и +1 к версии сss или js докидывать если етаг был изменён но это получается тоже самое что предложил AllesKlar. А надо токо разок чекнуть и докинуть версию при изменении. соответственно напрашивается вывод что vk при изменении/заливки файла и изменяют версию накидывают +1 к версии асинхронно разово. Либо при первом же запросе кем либо статического файла у которого изменился etag послать от nginx запрос на свои какие то скрипты и докинуть +1 к версии скрипта.
killer8080
20.01.2016 - 21:51
Цитата (SerginhoLD @ 18.01.2016 - 23:56) |
брать дату/метку времени изменения файла и подставлять динамически |
+1
самое оптимальное решение почему то осталось незамеченным
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.