Javascript версии, чтобы избежать кеширования, различия в этих практиках?

Если я решаю использовать last_modified_time файла javascript или css и использую его временную метку unix в качестве ключа в имени, чтобы сэкономить кеш при изменении файла. В чем разница между следующими двумя практиками? filename: my_script.js и timestamp: 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> Имя файла будет изменено и не будет использоваться REWRITE RULE.

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

Первый, просто обманывающий браузер, чтобы считать его другим файлом. Итак, первый из них - путь.