Версии Javascript, чтобы избежать кеширования, разница в этих методах? - PullRequest
15 голосов
/ 22 ноября 2011

Если я решу использовать last_modified_time файла javascript или css и использовать его временную метку в качестве ключа в имени, чтобы уничтожить кэш при изменении файла. В чем разница между следующими двумя практиками? имя файла: my_script.js и отметка времени: 1321951817

1 / Файл включается как: <script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script> Следовательно, параметр строки запроса создает новый кеш при каждом изменении v.

2 / Файл включается как: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> Имя файла меняется с каждой модификацией, правило перезаписи удаляет метку времени и указывает запрошенный URL-адрес на my_script.js

3 / ОБНОВЛЕНИЕ: ОДИН БОЛЬШЕ МЕТОД НА ОСНОВЕ ОТВЕТОВ НИЖЕ : Файл переименован и включен как: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> Имя файла изменено и НЕТ ПРАВИЛА ОБНОВЛЕНИЯ.

Вопрос. По сути, эти два метода одинаковы или есть какие-либо преимущества / недостатки использования параметров строки запроса вместо прямого имени файла.

Ответы [ 2 ]

22 голосов
/ 22 ноября 2011

Использование обновленной строки запроса - плохое решение.Посмотрите, что Стив Соудерс сказал об этом: http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

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

В современной веб-разработке вам действительно необходимо максимально оптимизировать свою страницу, что означает объединение CSS и JavaScript в одинфайлы, которые минифицированы.Это означает, что вы вводите шаг сборки в свой процесс, и что время последнего изменения вашего файла всегда будет при последней сборке.Если вы установите это имя в качестве имени файла, вы по сути все время будете разрушать кэш пользователей, и иногда вам это не нужно.

Я рекомендую переименовать файлы в сумму md5 их содержимого.Таким образом, вы можете делать новые сборки все время, но имя файла меняется только при изменении содержимого.Это делает ваше имя файла идентификатором содержимого.Используя это, вы можете установить заголовок с истекшим сроком давности на весь ваш статический контент и просто перестать беспокоиться об этом.

Я могу рекомендовать использовать для этого систему сборки, так как этот рабочий процесс становится скучным быстро.Моя компания недавно открыла исходный код, который делает это среди множества других вещей, которые оптимизируют вашу веб-страницу: https://github.com/One-com/assetgraph-builder Есть много других инструментов сборки, которые делают то же самое.Посмотрите вокруг и найдите тот, который лучше всего подходит для вашей разработки.

6 голосов
/ 22 ноября 2011

Вы говорите это сами: во втором примере вы используете правило перезаписи, которое проверяет с помощью регулярного выражения каждую загружаемую страницу.

Первый, который просто обманывает браузер, думая, что это другой файл.Итак, первый путь.

...