Что делает добавление «? V = 1» к URL-адресам CSS и Javascript в тегах ссылок и сценариев?

Я просматривал шаблон HTML 5 (из http://html5boilerplate.com/) и заметил использование "?v=1" в URL при обращении к файлам CSS и Javascript.

  1. Что делает добавление "?v=1" к URL-адресам CSS и Javascript в тегах ссылок и сценариев?
  2. Не все URL-адреса Javascript имеют "?v=1" (пример из приведенного ниже примера: js/modernizr-1.5.min.js). Есть ли причина, почему это так?

Пример из их index.html:

<!-- CSS : implied media="all" -->
<link rel="stylesheet" href="css/style.css?v=1">

<!-- For the less-enabled mobile browsers like Opera Mini -->
<link rel="stylesheet" media="handheld" href="css/handheld.css?v=1">

<!-- All JavaScript at the bottom, except for Modernizr which enables HTML5 elements & feature detects -->
<script src="js/modernizr-1.5.min.js"></script>

<!------ Some lines removed ------>

<script src="js/plugins.js?v=1"></script>
<script src="js/script.js?v=1"></script>

<!--[if lt IE 7 ]>
  <script src="js/dd_belatedpng.js?v=1"></script>
<![endif]-->


<!-- yui profiler and profileviewer - remove for production -->
<script src="js/profiling/yahoo-profiling.min.js?v=1"></script>
<script src="js/profiling/config.js?v=1"></script>
<!-- end profiling code -->

Заранее спасибо.

121 голос | спросил maxyfc 12 PM00000030000005631 2010, 15:11:56

8 ответов


0

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

/Resources/Combined.css?v=x.x.x.buildnumber

Поскольку это меняется с каждым новым нажатием кода, клиент вынужден получать новую версию только из-за строки запроса. Посмотрите на эту страницу (на момент ответа), например:

<link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">

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

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

ответил Nick Craver 12 PM00000030000004731 2010, 15:14:47
0

Это гарантирует, что вы получаете последнюю версию файла css или js с сервера.

А позже вы можете добавить "?v=2", если у вас более новая версия и "?v=3", "?v=4" и т. д.

Обратите внимание, что вы можете использовать любой querystring, например, «v» не является обязательным:

"?blah=1 "также будет работать.

И

"?xyz=1002" будет работать.

И это распространенная техника, потому что браузеры теперь кэшируют файлы js и css лучше и дольше.

ответил Amr Elgarhy 12 PM00000030000005231 2010, 15:12:52
0

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

Например, если ваш файл .js or .css датирован 2011-02-08 15:55:30 (последняя модификация), тогда версия должна быть равна .js?v=20110208155530

Должно быть легко читать свойства любого файла на любом языке. В ASP.Net это действительно легко ...

".js?v=" + File.GetLastWriteTime(HttpContext.Current.Request.PhysicalApplicationPath + filename).ToString("yyMMddHHHmmss");

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

Удачи, ст.

ответил Art 8 FebruaryEurope/MoscowbTue, 08 Feb 2011 19:10:37 +0300000000pmTue, 08 Feb 2011 19:10:37 +030011 2011, 19:10:37
0

Файлы Javascript часто кэшируются браузером гораздо дольше, чем вы могли ожидать.

Это часто может привести к неожиданному поведению при выпуске новой версии файла JS.

Поэтому обычной практикой является добавление параметра QueryString в URL-адрес файла javascript. Таким образом, браузер кэширует файл Javascript с v = 1. Когда вы выпускаете новую версию своего файла javascript, вы меняете URL-адрес на v = 2, и браузер будет вынужден загрузить новую копию.

ответил Robin Day 12 PM00000030000004831 2010, 15:14:48
0

Чтобы ответить на ваши вопросы;

"? v = 1" это написано только для того, чтобы загружать свежую копию файлов css и js вместо использования из кеша браузера.

Если вы упомянете этот параметр строки запроса в конце таблицы стилей или в файле js, то это заставит браузер загрузить новый файл, благодаря чему последние изменения в файлах .css и .js становятся эффективными в вашем файле. браузер.

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

Вот статья, которая объясняет это Как и зачем создавать версии для файлов CSS и JS

ответил Tapan kumar 8 +04002013-10-08T16:50:26+04:00312013bEurope/MoscowTue, 08 Oct 2013 16:50:26 +0400 2013, 16:50:26
0
// front end cache bust
var cacheBust = ['js/StrUtil.js', 'js/protos.common.js', 'js/conf.js', 'bootstrap_ECP/js/init.js'];   
for (i=0; i < cacheBust.length; i++){
     var el = document.createElement('script');
     el.src = cacheBust[i]+"?v=" + Math.random();
     document.getElementsByTagName('head')[0].appendChild(el);
}
ответил Conete Cristian 2 J0000006Europe/Moscow 2016, 09:09:41
0

Просто мои два цента.

Как вы могли прочитать ранее, ?v=1 гарантирует, что ваш браузер получит версию 1 файла. Если у вас есть новая версия, вам просто нужно добавить другой номер версии, и браузер забудет о старой версии и загрузит новую.

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

ответил Phugo 14 PMpFri, 14 Apr 2017 20:10:02 +030010Friday 2017, 20:10:02
0

Как уже упоминалось, это используется для очистки кэша внешнего интерфейса. Чтобы реализовать это, я лично нашел полезным пакет nru grunt-cache-bust.

ответил Ram 24 Jpm1000000pmWed, 24 Jan 2018 21:11:19 +030018 2018, 21:11:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132