Подтвердить что ты не робот

Зачем передавать параметры в файлы ссылок CSS и JavaScript, такие как src= "../cnt.js? Ver = 4.0"?

Когда я увидел исходный код многих сайтов, параметры были переданы в файл связывания (CSS/JavaScript).

В источнике переполнения Stack я получил

<script type="text/javascript" src="http://sstatic.net/js/master.js?v=55c7eccb8e19"></script> 

Почему используется master.js?v=55c7eccb8e19?

Я уверен, что файлы JavaScript/CSS не могут получить параметры.

В чем причина?

4b9b3361

Ответ 1

Обычно это делается для предотвращения кеширования.

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

Ответ 2

Как говорили другие, вероятно, это попытка контролировать кеширование, хотя я думаю, что лучше всего это сделать, изменив имя ресурса (foo.v2.js, not foo.js?v=2), а не версию в строке запроса. (Это не означает, что вам нужно переименовывать файлы, есть более эффективные способы сопоставления этого URL файла с базовым файлом.) Эта статья, хотя четыре летний и, следовательно, древний в мире паутины, по-прежнему остается весьма полезной дискуссией. В нем автор утверждает, что вы не хотите использовать строки запросов для версий, потому что:

... Согласно письму спецификации кэширования HTTP, пользовательские агенты никогда не должны кэшировать URL-адреса с строками запросов. Хотя Internet Explorer и Firefox игнорируют это, Opera и Safari не...

Это утверждение может быть не совсем корректным, потому что то, что говорит

... поскольку некоторые приложения традиционно использовали GET и HEAD с URL-адресами запросов (те, которые содержат "?" в части rel_path) для выполнения операций со значительными побочными эффектами, кэши НЕ ДОЛЖНЫ обрабатывать ответы на такие URI как свежие, если только сервер предоставляет явное время истечения срока действия...

(Этот акцент в конце мой.) Таким образом, использование версии в строке запроса может быть прекрасным до тех пор, пока вы также включаете явные заголовки кеширования. Предоставленные браузеры правильно реализуют вышеизложенное. И прокси. Вы видите, почему я думаю, что вам лучше с версиями в фактическом локаторе ресурсов, а не в параметрах запроса (что [снова] не означает, что вы должны постоянно переименовывать файлы, см. Статью, приведенную выше для получения дополнительной информации). Вы знаете браузеры, прокси и т.д. По пути собираются обновить ресурс, если вы измените его имя, а это означает, что вы можете дать предыдущему "имени" бесконечное время кеша, чтобы максимизировать преимущество промежуточных кешей.

Относительно:

Я уверен, что файлы Js/CSS не могут получить параметры.

Просто потому, что возвращаемый результат является ресурсом JavaScript или CSS, это не означает, что он является литеральным файлом в файловой системе сервера. Сервер может выполнять обработку на основе параметров строки запроса и генерации настраиваемого ответа JavaScript или CSS. Нет причин, по которым я не могу настроить свой сервер для маршрутизации всех файлов .js, чтобы (скажем) обработчик PHP, который просматривает строку запроса и возвращает что-то настроенное в соответствии с указанными полями. Таким образом, foo.js?v=2 может отличаться от foo.js?v=1, если я настроил свой сервер для этого.

Ответ 3

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

Например, если у вас есть scripts.js, и браузер посещает страницу, они загружают и кэшируют (хранят) этот файл, чтобы сделать следующую страницу быстрее. Однако, если вы внесете изменения, браузер может не распознать его до истечения срока действия кеша. Тем не менее, scripts.js?v2 теперь заставляет браузер принудительно повторно выбирать, потому что "имя изменено" (хотя оно и не было, просто содержимое).

Ответ 4

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

Ответ 5

<script type="text/javascript"> 
// 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);
}
</script> 

Ответ 6

Это заставит браузер повторно кэшировать файл .js, если было какое-либо обновление.

Вы видите, что когда вы обновляете JS на сайте, некоторые браузеры могут кэшировать старую версию (для улучшения производительности). Sicne вы хотите, чтобы они использовали ваш новый, вы можете добавить что-то в поле запроса имени и voíla! Браузер повторно извлекает файл!

Это относится ко всем файлам, отправленным с сервера btw.

Ответ 7

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

Ответ 8

"Я уверен, что файлы JavaScript/CSS не могут получить параметры"

function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens, re = /[?&]?([^=]+)=([^&]*)/g;
    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }
    return params;
}

Ответ 9

Это называется Cache Busting.

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

Существуют различные типы перебора кеша, например:

  • Static
  • Дата/время
  • Версия программного обеспечения
  • Хэшировано-Content

Я уже писал статью о распаковке кеша, которая вам может пригодиться:

http://curtistimson.co.uk/front-end-dev/what-is-cache-busting/