Как бороться с кешем браузера? - PullRequest
2 голосов
/ 13 июля 2009

Каковы ваши хитрости в получении кеширующей части веб-приложения?

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

Как сделать так, чтобы все изменения обновляли весь кеш?

Как встроить ревизию SVN в код / ​​URL?

Помогает ли одновременное использование нескольких версий для решения проблемы несовпадения версий?

Ответы [ 3 ]

2 голосов
/ 21 июля 2009

Посмотрите на проект minify . Он написан на PHP, но вы можете использовать его как проект для любого языка.

Основные характеристики:

  • файл конфигурации для объединения и минимизации нескольких файлов js или css в один
  • всегда использует дату последнего изменения последнего измененного файла в группе конфигурации в качестве параметра URL

пример ресурса может выглядеть как

<script type="text/javascript" src="/min/g=js1&1248185458"></script>

, которая будет извлекать группу jav1-файлов js1 в вашей конфигурации с номером версии "1248185458", который на самом деле является просто последней измененной датой, преобразованной во время эпохи.

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

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

1 голос
/ 13 июля 2009

Несколько способов решить эту проблему:

Следуя подсказке, приведенной об использовании версий #, если это создает трудности для вас в вашей среде сборки, также не менее эффективно поместить параметр URL в конец вашего URL. Клиенты браузера будут обрабатывать каждый URL с другим параметром версии как URL-адрес в своем кэше и загружать файл снова. Серверы не будут заботиться о наличии параметра для статического содержимого

Так, например, http://mydomain.com/js/main.js может быть включено в ваш HTML как http://mydomain.com/js/main.js?v1.5. Возможно, вам будет проще передать версии # в ваши серверные скрипты и добавить их на ваши клиентские включающие URL-адреса. .

Второй метод, который я видел хорошо работающим, - это использование серверного контроллера для доставки вашего кода. Facebook использует это. Вы увидите включенные в скрипт теги, которые всегда заканчиваются на «.php».

например.

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

Их серверная часть определяет, что JS необходимо отправить клиенту, в зависимости от среды, которая была отправлена ​​в запросе.

1 голос
/ 13 июля 2009

Я думаю, что вы на правильном пути, добавив номера версий в свои файлы js css. И вы можете использовать инструмент сборки, чтобы собрать все это вместе для вас, как http://ant.apache.org/ или http://nant.sourceforge.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...