Бывает же...

Примерно неделю назад делал правки на сайте. Работа обычная, ничего сложного, справился за один день. Сижу кушаю печеньки с чаем, раздаётся звонок, поднимаю трубку, мужской голос:


- Алло, это Такой-то-Такойнович?

- Да это я.

- Вы там совсем охуели?!


После такого вопроса, я право слово, охуел...


- Простите, а кто это?! Что вы хотели?!

- Вы неделю назад нам делали правки! Какого хуя ещё ничего не сделано?!

- Как не сделано, я всё за один день закончил!

- Как вы могли закончить, если ничего не изменилось!

- Вы кеш сбрасывали в браузере?

- Кого бля?!

- Кеш!

- Хуешь! Ты мне сука зубы заговариваешь?! Когда, блядь, работа будет сделана?!

- Просто нажмите на клавиатуре ctrl + f5...

- ...

- Ну что у вас там?

- Да всё работает... Извините... Но вы всё равно сильно не хуейте!


И положили трубку.

Бывает же... Правки, Клиенты, Заказчики, Тег для красоты
Вы смотрите срез комментариев. Показать все
171
Автор поста оценил этот комментарий
А к стилям и т.п. приписать какое-нибудь ?v=1.07 никак?
Чтобы у тех кто ранее посещал сайт просто всё работало без очистки кэшей.
раскрыть ветку (86)
101
Автор поста оценил этот комментарий

Совершенно верно. Программист обязан обеспечить корректное обновление стилей и скриптов (особенно скриптов) на стороне клиента. Всем же пользователям Ctrl+F5 не нажмешь. Так что в посте как раз косяк исполнителя явный. И если заказчик и не прав по форме общения, но сама суть претензии адекватная.

раскрыть ветку (2)
18
Автор поста оценил этот комментарий
Плюс.
Реально "охуеешь", если каждый раз "всякие ваши кэши" сбрасывать. Так что клиент, пусть грубо, но прав.
7
Автор поста оценил этот комментарий
Но теперь исполнитель знает, как правильно делать. И я тоже, хоть сайты и не делаю. #пикабупознавательный
34
DELETED
Автор поста оценил этот комментарий

О_о я наверно сильно зелёный, не так давно работаю в этой сфере, можно поподробней? Буду признателен =)

раскрыть ветку (75)
37
Автор поста оценил этот комментарий

если правятся скрипты/стили, которые любит кэшировать браузер на долго, то делается что-то типа такого style.css?1, и при каждом изменении цифра увеличивается.


но по хорошему все это делается на стороне цмс/фреймворка

раскрыть ветку (23)
11
DELETED
Автор поста оценил этот комментарий

спасибо буду знать )

раскрыть ветку (3)
9
Автор поста оценил этот комментарий

браузер хранит любые файлы либо пока кончится срок их действия (читай подробнее про заголовки), либо если ссылка изменится, тогда считается, что это новый файл.

8
Автор поста оценил этот комментарий

Вот статья: https://habrahabr.ru/post/62844/

3
Автор поста оценил этот комментарий

И не хуей!

Автор поста оценил этот комментарий

Насколько это кроссбраузерно?

раскрыть ветку (3)
Автор поста оценил этот комментарий

100% кросраузерно и кросплатформенно


Дело в том что символ "?" обычно подразумевает GET-запрос, а запросы не кешируются.

Но вот указывать версионность в виде style.css?123 не желательно, лучше указать за что именно "123" указывает, записав что-то в роде ?ver=123 или ?v=123

раскрыть ветку (1)
Автор поста оценил этот комментарий

Любая ссылка подразумевает GET запрос, через "?" аргументы передают, но браузеру похер. Он строит ассоциации ссылка - объект, и если ссылку изменить любым образом (в данном случае добавив часть, которую сервер игнорирует), ему придется получать файл заново.

Автор поста оценил этот комментарий
Абсолютно, так как браузер считает, что если есть уникальный URI с "?", значит есть уникальный некешируемый ответ.

Более ноля слов "уникальный" может оказаться лишним, если перечитывать разные книжки.

Автор поста оценил этот комментарий
Зачем руками дописывать, если можно сделать так, чтобы каждый раз генерилось рандомное (допустим) 6-значное число?
раскрыть ветку (6)
Автор поста оценил этот комментарий
Не надо статику превращать в динамику.

Если очень хочется вытеснить из кэша вот прям сейчас и на всё время, сколько там по кэш-контролу положено, то можно приписать что-то типа "?remove-on-20171110" и потом вернуться 10 ноября и убрать этот "?remove-on-20171110".

Но это для новичков, кто просто ещё не изучил более правильные методы. Любые из.

Автор поста оценил этот комментарий
Ну и тогда каждый раз браузер будет загружать полностью все файлы и сайт загружаться дольше.
раскрыть ветку (4)
2
Автор поста оценил этот комментарий

Слушайте, ну по-хорошему там вообще должна стоять переменная, а деплоймент скрипт должен каждый раз перед деплоем на продакшн менять её на новое число.


Но мы понимаем, что тс работает над небольшим проектом, где версионным контролем и не пахло. Собираем npm-ом (или вебпаком, что вы там любите) стили в один файл, миницифируем, на выходе получаем файл такого веса, который даже с мобильным интернетом загрузится шустро.


Ну или у автора перед глазами должна висеть табличка "смени версию"))

раскрыть ветку (3)
Автор поста оценил этот комментарий

>>Собираем npm-ом

Npm это просто менеджер пакетов. А вебпак просто собирает бандл, версионированием он не занимается, может только хэш к имени файла добавить. Да и по умолчанию вебпак css не соберет без плагинов.

раскрыть ветку (1)
Автор поста оценил этот комментарий

мне кажется он про npm watch говорил, но я не уверен

Автор поста оценил этот комментарий

Золотой ответ, наконец-то. А еще можно генерить CSS с автосборкой и минимизацией по первому запросу через mod_rewrite, а потом хранить его по тому же пути уже статическим. И в имени файла держать дату. А в шаблоне HTML эту дату изредка автоматом же обновлять, исходя из даты последнего изменения самого свежего файла из набора CSS с автосборки.

ещё комментарии
61
Автор поста оценил этот комментарий

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


Про инвалидацию кеша тебе хорошо написали - браузер кеширует статику жестко, поэтому самый бронебойный метод - изменить урл любым доступным образом.

раскрыть ветку (5)
3
Автор поста оценил этот комментарий

Браузер кеширует статику ровно так, как ему скажет сервер.

раскрыть ветку (4)
9
Автор поста оценил этот комментарий

Хром в этом плане немного охуевший.

раскрыть ветку (3)
Автор поста оценил этот комментарий
Как например? Последний, когда тестировал, было все вменяемо.
раскрыть ветку (2)
Автор поста оценил этот комментарий

https://habrahabr.ru/post/148779/

Да старое, но в свое время доставило.

п.с.Только размер кэша говорит о многом.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Даже 5 лет назад там было упомянуто логичное и правильное решение: указывать елаемое поведение самому:

"Думаю если сервер явно не указывает поведение cache-control броузер волен кешировать как ему удобнее.

Я во время разработки прописываю must-revalidate и хром отлично подгружает все изменения с сервера."

7
Автор поста оценил этот комментарий

Один из азов при работе с "фронтом": делая изменения - не ломай работу у клиента.
Вам надо было просто добавить get аргумент к изменённым подключаемым скриптам/стайлам. Т.е. для того, чтобы принудительно "прибить" кешу и показать изменения, надо, к примеру,  заменить строку вида <link rel="stylesheet" href="/css/style.css">, на строку вида  <link rel="stylesheet" href="/css/style.css?v=3">. Т.е. вы, условно, "говорите" браузеру, что у вас новая версия стайлов и необходимо тянуть её вместо кеша. Ну или совсем "идиотский" вариант, если вам "совсем не нужно" кеширование браузером - аргумент подставлять динамический (т.е. к примеру таймстамп). И да, аргумент необязательно должен быть "v" можете хоть "?huy=49i5" написать туда.
Да, естественно, это всё весьма грубо и приближённо, но общее понятие даёт.

раскрыть ветку (13)
4
DELETED
Автор поста оценил этот комментарий

спасибо за науку, впредь буду пользоваться этим способом. Только у меня вопрос, при этом имя самого файла надо менять?

раскрыть ветку (11)
3
Автор поста оценил этот комментарий

Нет, имя файла не нужно. В идеале можно автоматизировать этот процесс заставив скрипт на сервере приписывать после имени прикрепляемого файла (скрипт, стиль, картинка) знак вопроса, дату и время его изменения. Тогда можно вообще не париться о кеше точно.

раскрыть ветку (10)
2
DELETED
Автор поста оценил этот комментарий

Спасибо, друг всё стало понятно, возьму на вооружение )

раскрыть ветку (9)
2
Автор поста оценил этот комментарий

Обращайся )

раскрыть ветку (4)
3
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (3)
3
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
3
DELETED
Автор поста оценил этот комментарий

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

2
Автор поста оценил этот комментарий

Но вы всё равно сильно не хуейте!

Автор поста оценил этот комментарий

Самый оптимальный вариант - использовать сборщики/бандлеры типа gulp, grunt, webpack, где будет выходить имя файла как часть хэша, либо использовать фреймворки, где такое введено по умолчанию.

ну, или самый рукожопый вариант - как сказали выше, менять парамертры в адресе после каждого изменения.

есть еще вариант с настройкой etag у nginx, но это на любителя

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

До продвинутых вариантов, я думаю, человек доберётся сам :). Тут, главное, было дать направление, и объяснить, что такая вещь есть и как она делается. А дальше, как говорится, копайте и учитесь сами, в конце концов, у нас тут не филиал stackoverflow, чтобы расписывать портянки со всеми возможными методами. А так человек информацию увидел и принял к размышлению, и, если он действительно захочет разобраться, он начнёт копать и смотреть какие ещё варианты существуют, и в каких случаях какой лучше использовать.

Автор поста оценил этот комментарий

Да, но каждый раз получать хеш файла весьма накладно будет. Проще будет, как я описал, прикреплять время изменения файла, его считать куда проще и быстрее. Но самое быстрое по системным энергозатратам – это, как ни странно, действительно в ручную добавлять версию файла к имени и менять пути к нему, но совсем не эффективно по удобству и разработки.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Не каждый раз же, лол. Создается файл вида файл:путь с хэшем. Вебпак так работает.

1
Автор поста оценил этот комментарий

@ZZiliST, более продвинутый способ - это добавление хэша к имени файла по типу 234sadsad.style.css, get-параметры не всегда работают.

20
Автор поста оценил этот комментарий

Подробности - абсолютно твой косяк. Допустим даже что ты делал внутренний сервис для компании. А если у тебя сайт на тыщи посетителей, ты про каждого будешь пост на Пикабе делать, какой он тупой?

Меняешь картиночки - переименуй их.

Меняшь скрипты стили - добавь версии.

Мужик то прав был на все сто.

раскрыть ветку (3)
10
Автор поста оценил этот комментарий

Я б сказал, на 80. Разговор с ругани начинать - хреновая привычка.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

нууу.. Если учесть, что речь идет от лица программиста, то может и на 95)))

Мы же не знаем, может ТС вообще неделю гасился, ибо думал, что все работает, на локалке же проверил))


з.ы. просто предположил, без обид

1
Автор поста оценил этот комментарий

ну не знаю, у меня на локалхосте всё работает :)
криворукие разработчики (c)

3
Автор поста оценил этот комментарий

Так что совет правильный. Дядька хоть и быдлан, но косяк твой =)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Так я и не спорю с этим ) Зато благодаря этому случаю, я узнал что-то новое )

2
Автор поста оценил этот комментарий

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

Иллюстрация к комментарию
раскрыть ветку (19)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (4)
Автор поста оценил этот комментарий

Тогда вообще кеширования не будет. Увеличится трафик для пользователя. Пусть, конечно, и небольшой, но все же.
В крайности бросаться не хорошо. Хорошо когда работает как надо. Кеширует, но при изменении кеш обновляется.

раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну для дев то можно, конечно и тайм().
Но диалог то идет о рабочей версии сайта, сдаваемой заказчику. При чем тут вообще дев то?

Автор поста оценил этот комментарий

1. ты просто убьёшь кеширование стилей и js.

2. ты каждый раз будешь в кеше юзверя делать новую копию всех своих css+js файлов.

1
Автор поста оценил этот комментарий

у тебя стили хранятся в папке с картинками? отличный выбор архитектурного расположения файлов

раскрыть ветку (8)
Автор поста оценил этот комментарий

style.css - это скомпилированный итоговый css-файл, + не нужно указывать пути к картинкам

а ты как предлагаешь огранизовывать директории? отдельно images, отдельно css ? и в путях что будет ../images/bg.png или везде писать путь от корня сайта?

раскрыть ветку (7)
3
DELETED
Автор поста оценил этот комментарий
отдельно images, отдельно css ?

Вообще-то в 99% случаев так и делают.

раскрыть ветку (1)
Автор поста оценил этот комментарий

ну и пусть себе делают. мне удобнее делать всё в одной папке - правишь сразу и картинки и стили.

DELETED
Автор поста оценил этот комментарий
и в путях что будет ../images/bg.png

Именно так.

раскрыть ветку (4)
Автор поста оценил этот комментарий

я предпочитаю лаконичный bg.png - без привязки к директориям.

раскрыть ветку (3)
DELETED
Автор поста оценил этот комментарий

Собственно, на небольших собственных проектах можно хоть вообще всё в корне хранить. Никто не запрещает же. ;)

раскрыть ветку (2)
Автор поста оценил этот комментарий

простата не означает хаос.

чем проще, тем удобнее.

зачем самому себе придумывать проблемы если можно сделать всё проще.

style.css - это вообще уменя скомпилированный минимизированный less-файл, так что весь less-код всё равно лежит отдельно не в папке images, в images только готовый к использованию результат

раскрыть ветку (1)
Автор поста оценил этот комментарий

тоесть лишние 10 символов - убивают лаконичный вид?

Автор поста оценил этот комментарий
Бля что за редактор? vscode не пробовали?
раскрыть ветку (4)
4
Автор поста оценил этот комментарий

Notepad++ ЗБС

Иллюстрация к комментарию
раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
Автор поста оценил этот комментарий

у меня sublime text для кодинга.

но для быстрого открытия notepad++

Автор поста оценил этот комментарий

я просто открыл его в notepad++ первое, что открылось.

4
Автор поста оценил этот комментарий

Вы осознаете, что большинство пользователей сайта до сих пор не видят правок?)

4
Автор поста оценил этот комментарий

Пиздец. Хорошо, что вы не врач - угрозы жизням нет

1
Автор поста оценил этот комментарий

А в Хроме уж давно Ctrl+F5 только при открытой панели F12 работает.

Автор поста оценил этот комментарий

Если ты не знаешь что такое кэш, то скорее всего сбрасывать его надо не из кода, а из админки CMS. Где-нибудь в "Настройки - сбросить кэш".

раскрыть ветку (1)
Автор поста оценил этот комментарий
если проблемы клиента решились через ctrl+f5, значит с серверной стороны ничего не кэшируется.
1
Автор поста оценил этот комментарий

да-да, разработчик тупой еблан, при этом ещё и выёбывается.

или он думает что все пользователи сайта тоже будут ctrl+F5 нажимать при просмотре сайта?

все css/js всегда должны иметь ?v=2

Автор поста оценил этот комментарий
В андройдовском хроме не помогает
2
DELETED
Автор поста оценил этот комментарий

Как меня пугает кол-во плюсов, и кол-во минусов у этого поста.

раскрыть ветку (1)
5
Автор поста оценил этот комментарий

АППРОБАРЕФОБИЯ – боязнь одобрения (плюсов)

КРИТИКОФОБИЯ – боязнь критики (минусов)


http://psyhologytoday.ru/stories/fobii/spisok-fobii/

Автор поста оценил этот комментарий

А что заставит браузер загрузить новую версию самой страницы? «У меня распечатка никак не обновляется!!»

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Хотел начать ответ с "пользователи тупее и тупее с каждым годом", но переформулирую :)

Интерфейсы становятся юзабельнее и юзабельнее. Порог вхождения для пользователя снижается.

Технически нет проблем js скриптом раз в N секунд делать ajax запрос к серверу и уточнять актуальность информации.

Меня прекрасно автоматически разлогинивает в интернет-банках через какое-то время бездействия, web интерфейсы почты показывают новые письма без перезагрузки страницы, а когда я переключаюсь во вкладку, открытую ещё утром, там уже актуализированные блоки контекстной рекламы и таких примеров много.

Резюмируя. Интернет-ресурсы перестают быть документами с разметкой и становятся полноценными приложениями. Пройдет немного времени и твоя конкретная жалоба на "тупого юзера" будет порождать аргументированные ответы "сам дурак" :)
Автор поста оценил этот комментарий
А это идея! Для вот я дибил.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку