javascript
2016-09-20 3 views 0 likes 
0

У меня есть вопрос. В старом проекте, который я в настоящее время работает над Я нашел этот код:Javascript src с вопросительным знаком

<script type="text/javascript" language="Javascript" src='<%= Page.ResolveUrl("~/javascripts/CardConnectorManager.js?2016071203")%>'></script> 

У меня есть:

  • /javascripts/CardConnectorManager.js

, но не имеют

  • /javascripts/CardConnectorManager.js?2016071203

Что делает этот знак вопроса и почему кто-то пишет такую ​​вещь? Возможно, этот файл существует только на сервере на какой-нибудь вещице?

+1

Связанные: [Различия в реализациях кэширования] (http://stackoverflow.com/q/22665311/464709). –

+1

Это тоже может помочь вам: http://stackoverflow.com/questions/27914767/is-it-necessary-to-rename-js-files-to-invalidate-cache –

ответ

3

David R's answer довольно хорошо, но я хочу добавить немного информации:

Обычно существует два подхода к кэш-преломлении:

  1. Rename файл;
  2. Добавить хэш в конец файла.

Первый подход может быть лучше для некоторых случаев (see this question), но может быть более болезненным. Как бы вы сохранили этот файл в контроле версий? Что делать, если таких файлов много?

Второй подход намного проще. Вы просто добавляете что-то вроде app.js?_=<some_string>. <some_string> может быть любым: отметка времени, номер сборки или просто случайная строка.

Для этого подхода вам может быть полезно использовать автоматические инструменты, такие как gulp-rev.

Обновление: Честно говоря, было бы намного лучше иметь номер версии для всех статики в проекте: html, images, css, js. Там много инструментов, чтобы сделать это автоматически.

В качестве альтернативы существует некоторая техника, например, угловые разработчики имеют службу $templateCache, которая позволяет разработчику помещать весь html проекта (исключая index.html) в один файл js.

1

Это относится к тому же файлу CardConnectorManager.js.

Для предотвращения кеширования суффикс даты и времени при вызове вызова файла .js является распространенной практикой среди разработчиков.

Надеюсь, это поможет!

1

В основном файл JS, заканчивающийся на «?» (знак вопроса), за которым следует некоторое случайное число, используется для принудительного обновления кеша браузера для этого конкретного файла. Браузер хранит загруженные js-файлы для этого веб-сайта в кэш-памяти, чтобы принудительно обновить его, он суффикс со случайным числом.

В вашем примере, если вы внимательно наблюдаете, указанное число - это не что иное, как отметка времени даты, то есть номер 2016071203 представляет - 2016-07-12 03. Если вы обновили этот файл на сервере, вам просто нужно обновить новый штамп времени (вы можете использовать любое случайное число). Временная метка обычно используется, чтобы избежать дублирования числа.

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

0

Значок Вопроса (?) Предназначен для обработки кэширования. Он обновляет файл каждый раз в браузере. Мы используем тот же метод для обновления динамически генерируемых изображений.

Смежные вопросы