Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Да, любое изменение в любая часть URL (исключая HTTP и изменения протоколов HTTPS) интерпретируется как другой ресурс браузером (и любые посреднические прокси) и таким образом приведет к отдельному объекту в кэше браузера.
Обновление:
требование в эта статья ThinkVitamin, с которой Opera и браузеры Safari/Webkit не кэшируют URL? query=strings ложь .
Добавление параметра номера версии к URL является совершенно приемлемым способом сделать слом кэша.
то, Что, возможно, смутило автора статьи ThinkVitamin, является тем, что удар Входит в адрес/адресную панель в Safari и результаты Opera в другом поведении для URL со строкой запроса в них.
Однако ( и это - важная часть! ) Opera и Safari ведут себя точно так же, как IE и Firefox когда дело доходит до кэширования встроили/связали изображения и таблицы стилей и сценарии в веб-страницах - независимо от того, имеют ли они"?" символы в их URL. (Это может быть проверено с простым тестом на нормальном сервере Apache.)
(я прокомментировал бы в настоящее время принимаемый ответ, если у меня была репутация, чтобы сделать это. :-)
Я на 99,99999% уверен, что это - весь URL, который привык к ресурсам кэша в браузере, таким образом, Ваша схема URL должна удаться прекрасный.
МИНИМУМ необходимо определить объект HTTP, полным путем, включая любые параметры строки запроса. Некоторые браузеры не могут кэшировать объекты со строкой запроса, но это не имеет никакого отношения к ключу к кэшу.
также важно помнить, что путь больше не достаточен. Варьирование: заголовок в ответе HTTP предупреждает браузер (или прокси-сервер, и т.д.) чего-либо Кроме URL, который должен использоваться для определения ключа кэша, такого как cookie, кодовые значения, и т.д.
К основному вопросу, да, изменение URL .js файла является sufficent. К большему вопросу того, что определяет ключ кэша, это - URL плюс Варьирование: ограничения заголовка.
Да. Другой путь является тем же с точки зрения кэшей.
Конечно, это должно использовать целый путь '/r20/example.js' 'по сравнению с '/r21/example.js'', могли быть совершенно другие изображения для начала. То, что Вы предлагаете, является жизнеспособным способом обработать управление версиями.
В большинстве браузеров используется полный URL. В некоторых браузерах, если у Вас есть запрос в URL, никогда не будет кэшироваться документ.
Весь URL. Я видел странное поведение в нескольких более старых браузерах, где чувствительность к регистру сыграла роль.
зависит. это, как предполагается, полный URL, но некоторые браузеры (Opera, Safari2) применяют другую стратегию кэша URL с различными параметрическими усилителями.
лучший выбор состоит в том, чтобы изменить имя файла .
существует очень умное решение здесь (использует PHP, Apache)
http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/
примечания к Стратегии: “According буква спецификации кэширования HTTP, агенты пользователя никогда не должны кэшировать URL со строками запроса. В то время как Internet Explorer и Firefox игнорируют это, Opera и Safari don’t - чтобы удостовериться, что все агенты пользователя могут кэшировать Ваши ресурсы, мы должны не допустить строки запроса в их URL. ”
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast