на этапе разработки и тестирования надо отключить кешрование
делаю так:
|
1 |
<link rel="stylesheet" type="text/css" href="1.css?+Date.now()" /> |
или так:
<script src="1.js?+Math.random()"></script>
что из этого лучше?
этого достаточно или лучше в файле index.php это делать ?
Дополнительно:
А зачем это делать?
Более правильным вариантом, если изменения заголовков невозможны, будет прописать время изменения файла.
mayton2019, к примеру, включено кэширование заголовком Cache-Control: навечно
в php файле?
Но если кеш nginx не справляется со своей работой (вы его пытаетесь хачить) то значит
надо пересмотреть саму стратегию.
Я-бы обновил версию приложения так чтобы 100% ссылок обновились. Например в RestAPI
делают версии /api/v1, /api/v2 и так далее. Обновляем версию и старые кеши умерли навсегда.
До перезагрузки nginx или там до чистки диска.
Вот. А по проблеме кеша еще один великий писал. Что в It есть две проблемы. Как назвать
переменную. И как инвалидировать кеш.
одностраничник html с прилинкованными к нему файлами js и css
все три файла надо некешировать на время внедрения и тестирования
будет ли достаточным добавлять к пути к файлам случайное число +Math.random() или ?+Date.now() ?
и указать заголовок Cache-Control в html метатегах и в php
|
1 |
<?php // самые первые строки файла, пока ничего не выводится в броузер header('Cache-Control: no-store'); // все остальное |
В принципе - этого может хватить.
Если это одностраничник с известно где расположенными стилями и скриптами, то можно так генерировать ссылки на них
|
1 |
function link($link){ if(is_readable($link)){ return $link.'?'.filemtime($link); } else if(false===strpos('?',$link)) { return $link.'?'.rand(1000,99999); } else return $link; } |
|
1 |
<link rel="stylesheet" type="text/css" href="<?=link('css/styles.css')?>"... |
Так появится возможность все таки кэшировать на клиенте неизмененные файлы. По внешнему виду ссылок (количество цифр после имени файла) можно понять, находит php файл исходник или нет.
|
1 |
<?php header('Cache-Control: no-store'); ?> <!DOCTYPE HTML> <html> <head>... |
ломать URL.
На этапе разработки достаточно просто держать открытой консоль браузера со включенной галочкой отключения кэша и больше ничего делать не нужно.
- в моем случае тестируют посетители сайта
- tyxeo, ну тогда не нужно отключать кэширование полностью. Достаточно обеспечить загрузку каждой новой версии файла
на php:
PHP1<script src="1.js?<?= filemtime('path/to/1.js') ?>"></script>Загрузите новый файл на сервер, время изменения изменится и пользователям загрузиться новая версия. Эта же версия закэшируется в браузере до следующего обновления.
Можно использовать сборщики фронта. В них уже встроены подобные механизмы.
- добавлление к пути к файлам случайное число +Math.random() или ?+Date.now()
- это работает ? - tyxeo, да, это полностью предотвращает кэширование.
только не в таком виде наверное. Так это просто текст - tyxeo, тогда уж на пхп
src="1.js?<?= time() ?>"
- и еще сделал так на сервере в файле index.php :
PHP1<?php header('Cache-Control: no-store'); ?> <!DOCTYPE HTML> <html> <head> ...
- tyxeo, ну вообще так делать не стоит. Я имею ввиду не стоит менять код для разработки. потом менять его для продакшена. поэтому я и предложил вариант с filemtime - он и для продакшена годится. В отличие от time()
Эти временные заголовки (которые в продакшене будут не нужны) тоже лучше прописать отдельно, в .htaccessHeader set Cache-Control "no-store"
- tyxeo, вот вам полный набор антикэша
PHP1Header set Expires "Mon, 26 Jul 1997 05:00:00 GMT" Header set Last-Modified "Mon, 26 Jul 1997 05:00:00 GMT" Header set Cache-Control "no-store, no-cache, must-revalidate" Header set Cache-Control "post-check=0, pre-check=0" Header set Pragma "no-cache"
- вариант с filemtime хорош
но я еще думаю надо ли и как некешировать html файл -
PHP1<script src="1.js?<?= filemtime('path/to/1.js') ?>"></script>
нет + после src="1.js?
это допустимый синтаксис? - tyxeo, да
- но я еще думаю надо ли и как некешировать html файл
- tyxeo, заголовки в htaccess должны помочь
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?

Для избежания загрузки кешированных файлов на веб-сайте можно применить несколько методов:
1. Управление кешированием на стороне сервера:
- Установите правильные заголовки кеширования в конфигурации сервера. Например, вы можете установить заголовки Cache-Control и Expires для указания браузеру, как долго хранить кешированные файлы.
- Используйте версионирование файлов или добавляйте случайные параметры к URL-адресам файлов, чтобы обновить кеш браузера при изменении файлов.
2. Изменение URL-адресов файлов:
- Используйте уникальные URL-адреса для каждой версии файла. Например, добавьте временную метку или хеш к имени файла.
- Используйте query string параметры для указания версии файла, например, "styles.css?v=2". Это заставит браузеры рассматривать файл как новый и загружать его заново, даже если он кеширован.
3. Использование мета-тега no-cache:
- Добавьте мета-тег в шапку HTML-страницы. Это указывает браузеру не кешировать содержимое страницы.
Применение этих методов поможет избежать проблемы загрузки кешированных файлов на вашем веб-сайте и обеспечит актуальность содержимого для пользователей.