Кешируют ли браузеры встроенный Javascript, и если да, то как выполнить принудительную перезагрузку? - PullRequest
5 голосов
/ 27 июля 2011

Мы недавно перешли на jQuery 1.6 и столкнулись с проблемой обратного компоновки attr () и prop ().В течение первых нескольких часов после того, как изменения были развернуты, все было хорошо, затем они начали ломаться для людей.Мы довольно быстро определили проблему и обновили JS-нарушитель, который был встроенным.

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

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

Мы используем APC, apc.stat = 1, поэтому он должен обнаруживать, что файлы PHP изменились.Просто чтобы быть в безопасности, я все равно обстрелял кэш кода операции.

Подводя итог, у меня есть два вопроса:

  1. Могут ли некоторые браузеры игнорировать строку запроса при загрузке jQuery?
  2. Могут ли некоторые браузеры кэшировать старую версию встроенного javascript?

Любые другие идеи также приветствуются.

ОБНОВЛЕНИЕ: В ходе проверки этогоНе было никакого неожиданного кеширования с использованием Firebug, я обнаружил случай, когда старая библиотека jQuery загружалась.Это не объясняет, почему у нас возникли проблемы после развертывания сайта и до того, как мы обновили встроенный код, но если это решит проблему, я возьму его.

Ответы [ 2 ]

7 голосов
/ 27 июля 2011

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

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

0 голосов
/ 27 июля 2011

Я бы сказал, что ответы на ваши вопросы: 1) Нет и 2) Да.

Версии jQuery - это разные URL, поэтому здесь нет проблем с кэшированием, если вы не отредактируете файл jQuery напрямую, не изменив версиюstring.

Страницы браузера (включая встроенный javascript) будут кэшироваться в соответствии как с настройками страницы, так и с настройками браузера (это то, что делают браузеры).Встроенный JavaScript не кэшируется отдельно, но если веб-страница кэшируется, то встроенный Javascript кэшируется вместе с ним.Какой тип допустимого кэширования вы установили для своих веб-страниц (либо в метатегах, либо через заголовки http)?

Множество материалов по теме управления кэшированием веб-страниц здесь и здесь при необходимости.

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

Самое безопасное, что нужно сделать, этоизменить исходные URL, когда у вас есть новый контент.Тогда существует нулевая вероятность того, что старая кэшированная страница когда-либо получит новый контент, поэтому вы избегаете возможности смешивания.Например, на веб-сайте обмена фотографиями Smugmug всякий раз, когда любой владелец сайта обновляет изображение до новой версии изображения, номер версии в URL-адресе изображения изменяется.Затем, когда исходная страница, которая показывает, что изображение подается с веб-сервера, включает новый URL-адрес изображения, поэтому независимо от того, находится ли старая версия изображения в кэше браузера или нет, изображение новой версии показываетсяuser.

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

...