Почему изображения и файлы JavaScript, включенные в DNN, больше не кэшируются на клиенте после их замены? - PullRequest
6 голосов
/ 01 марта 2009

Я установил DotNetNuke версии 4.9.2 и наблюдаю за заполненными состояниями кэша, используя Firebug и YSLOW ...

Все изображения и javascript кэшируются на клиенте, если я не заменю их ... Поэтому, если я загружаю новое изображение LOGO, оно больше не кэшируется. Существующие кешируются. Если я заменяю существующий файл .js (я запускал его через минификатор), он больше не кэшируется. Если я заменяю новый файл оригинальным, они снова кэшируются.

Я не смог найти документацию по этому вопросу ... есть идеи? Спасибо!

Ответы [ 7 ]

1 голос
/ 16 марта 2009

Кэширование на клиенте зависит от определенного набора HTTP-заголовков, которые веб-сервер отправит вашему браузеру, который ваш браузер использует при последующих запросах к тем же объектам (например, изображение логотипа).

Когда вы заменяете файл, веб-сервер изменит ответ, который он генерирует (HTTP Last-Modified / заголовки ETag), что приведет к аннулированию кэшированной копии вашего браузера.

1 голос
/ 18 марта 2009

Убедитесь, что для вашего экземпляра IIS установлено значение «Истек срок действия содержимого». Я обнаружил, что на нескольких моих хостинг-сайтах это не было установлено, и кэширование не было выполнено так, как должно быть. Я включил их, и теперь мои изображения и «статические» файлы кэшируются правильно.

Удачи J

1 голос
/ 12 марта 2009

Я бы не подумал, что DNN будет обслуживать активы / статические файлы (например, изображения). Я думаю, что они просто будут обслуживаться IIS. Если URL-адрес не выглядит примерно так:

blah.com/GetImage.aspx?filename=logo.jpg

Если ваши URL-адреса не содержат в себе «aspx», то проблема в IIS.

1 голос
/ 09 марта 2009

К вашему сведению, это может быть немного не по теме, но DotNetNuke выполняет кэширование своих модулей в виде простых файлов в каталоге / portals / (это настройка кэширования по умолчанию). В меню хоста вы можете очистить этот кеш и / или изменить настройки кеша.

DotNetNuke 5.x был полностью переработан, поэтому вы можете попробовать его, если вам нужна высокая производительность. Производительность сайта DotNetNuke.com значительно улучшилась при переходе с 4.9.x на 5.0.

1 голос
/ 04 марта 2009

Я нашел эту ссылку:

Решение проблемы кеширования

Здесь я хотел бы поделиться блестящими навыками отладки и решения проблем, которые я использовал для решения проблемы. Только я не могу, потому что я никогда не мог понять, что случилось. Мне кажется, что использование простой перегрузки [setCache (key, object)] просто не работает должным образом.

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

Вот код:

DateTime absoluteExpiration = DateTime.Now.Add(settings.CacheTime);
DataCache.SetCache(UrlDictKey, urlDict, null, absoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.AboveNormal, onRemove, settings.CachePersistRestart);

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

Нашел эту ссылку по адресу: http://www.ifinity.com.au/Blog/Technical_Blog/EntryId/55/DotNetNuke-Caching-and-a-performance-problem/

Надеюсь, я смог хотя бы помочь или направить вас в правильном направлении.

0 голосов
/ 07 марта 2009

Вы смотрели настройки кеша в настройках хоста, я думаю?

0 голосов
/ 05 марта 2009

Я не знаю о DotNetNuke, но вам как-то нужно сломать / убить кеш, обслуживая другой URL для того же имени файла. Посмотрите, как большие парни делают это:

Переполнение стека: /js/question.min.js?v=2527

Slashdot: images.slashdot.org/idlecore-tidied.css?T_2_5_0_244a

Digg: /css/176/global.css

bbc.co.uk: /home/release-29-7/style/homepage.min.css

...