Что означает добавление "?v=1 " для URL-адресов CSS и Javascript в тегах ссылок и скриптов?


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

  1. что добавление "?v=1" для CSS и Javascript URL-адресов в тегах ссылок и скриптов?
  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 -->

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

8 120

8 ответов:

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

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

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

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

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

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

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

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

и

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

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

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

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

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

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

из coz получить его красиво рефакторинг в свойства / функции в первую очередь и прочь вы идете. Больше никаких оправданий.

удачи, арт.

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

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

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

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

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

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

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

вот статья, которая объясняет эту вещь как и почему сделать версионирование CSS и js файлов

// 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);
}

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

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

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

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