Как заставить браузер видеть изменения CSS и Javascript?

Файлы CSS и Javascript меняются не очень часто, поэтому я хочу, чтобы они кешировались в веб-браузере. Но я также хочу, чтобы веб-браузер видел изменения, внесенные в эти файлы, не требуя от пользователя очистки кеша браузера. Также нужно решение, которое хорошо работает с системой контроля версий, такой как Subversion.


Some solutions I have seen involve adding a version number to the end of the file in the form of a query string.

Could use the SVN revision number to automate this for you: ASP.NET Display SVN Revision Number

Можете ли вы указать, как включить переменную Редакция другого файла? То есть в файле HTML я могу включить номер версии в URL-адрес файла CSS или Javascript.

В Книга о Subversion говорится о ревизии: «Это ключевое слово описывает последнюю известную ревизию, в которой этот файл был изменен в репозитории».

Firefox also allows pressing CTRL+R to reload everything on a particular page.

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
58
0
7 227
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я обнаружил, что если вы добавите последнюю измененную метку времени файла в конец URL-адреса, браузер будет запрашивать файлы при его изменении. Например в PHP:

function urlmtime($url) {
   $parsed_url = parse_url($url);
   $path = $parsed_url['path'];

   if ($path[0] == "/") {
       $filename = $_SERVER['DOCUMENT_ROOT'] . "/" . $path;
   } else {
       $filename = $path;
   }

   if (!file_exists($filename)) {
       // If not a file then use the current time
       $lastModified = date('YmdHis');
   } else {
       $lastModified = date('YmdHis', filemtime($filename));
   }

   if (strpos($url, '?') === false) {
       $url .= '?ts=' . $lastModified;
   } else {
       $url .= '&ts=' . $lastModified;
   }

   return $url;
}

function include_css($css_url, $media='all') {
   // According to Yahoo, using link allows for progressive 
   // rendering in IE where as @import url($css_url) does not
   echo '<link rel = "stylesheet" type = "text/css" media = "' .
        $media . '" href = "' . urlmtime($css_url) . '">'."\n";
}

function include_javascript($javascript_url) {
   echo '<script type = "text/javascript" src = "' . urlmtime($javascript_url) .
        '"></script>'."\n";
}

привет гром, я пробовал этот метод. однако я обнаружил, что как только я включил параметр, браузер не кэшировал файл css. Он загружает файл css каждый раз, когда я повторно посещаю страницу, не кэшируя ее. Я обнаружил это, продолжая вносить изменения в файл css, чтобы узнать, кэшируется ли файл css браузером. Я использую хром. Могу ли я узнать, как заставить браузер кэшировать файл css и загружать его только при изменении параметра? Спасибо.

davidlee 25.07.2010 17:32

@benmsia, вы смотрели, какие HTTP-заголовки возвращаются при запросе файла CSS?

grom 27.07.2010 03:38

Некоторые решения, которые я видел, включают добавление номера версии в конец файла в виде строки запроса.

<script type = "text/javascript" src = "funkycode.js?v1">

Вы можете использовать номер версии SVN для автоматизации этого для тебя, включив слово LastChangedRevision в ваш html-файл после того, как v1 появляется выше. Вы также должны настроить свой репозиторий для этого.

Надеюсь, это еще больше проясняет мой ответ?

Firefox также позволяет нажимать CTRL + R, чтобы перезагрузить все на определенной странице.

На мой взгляд, лучше сделать номер версии частью самого файла, например. myscript.1.2.3.js. Вы можете настроить свой веб-сервер на кеширование этого файла навсегда и просто добавить новый файл js, когда у вас будет новая версия.

Когда вы выпускаете новую версию ваших библиотек CSS или JS, происходит следующее:

  1. измените имя файла, чтобы включить уникальную строку версии
  2. изменить файлы HTML, которые ссылаются на библиотеку, чтобы они указывали на файл с версией

(обычно это довольно просто для сценария выпуска)

Теперь вы можете установить срок действия CSS / JS на годы вперед. Каждый раз, когда вы изменяете контент, если ссылающийся HTML указывает на новый URI, браузеры больше не будут использовать старую кэшированную копию.

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

Мне тоже было интересно, как это сделать, когда я нашел ответ Грома. Спасибо за код.

Мне было трудно понять, как предполагалось использовать код. (Я не использую систему контроля версий.) Таким образом, вы включаете метку времени (ts) при вызове таблицы стилей. Вы не планируете часто менять таблицу стилей:

<?php 
    include ('grom_file.php');
    // timestamp on the filename has to be updated manually
    include_css('_stylesheets/style.css?ts=20080912162813', 'all');
?>

?? функция include_css добавит последнюю измененную метку времени файла в конец URL-адреса. Контроль версий не требуется.

grom 23.09.2008 16:38

Другие вопросы по теме