Outputcache: VaryByHeader = "User-Agent" или VaryByCustom = "Браузер"?

Я не уверен в различиях между VaryByHeader="User-Agent" и VaryByCustom="Browser". Правильно ли, что последнее создаст меньше кэшированных страниц? Или, другими словами, если я хочу кэшировать только для разных типов браузеров (и версий), последний является лучшим выбором?

спасибо для любого совета! sl3dg3

Ответ 1

Из статьи MSDN - Кэширование ASP.NET: методы и лучшие практики:

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

Я бы сказал, что следующие пользовательские агенты будут считаться IE9.0 и создать одну запись в кеше:

  • Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))
  • Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)
  • Mozilla/5.0 (совместимо; MSIE 9.0; Windows NT 7.1; Trident/5.0)

Но создадим 3 записи, если вы использовали VaryByHeader="User-Agent"

Ответ 2

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

Кроме того, рекомендуется использовать страницу рекомендаций:

http://msdn.microsoft.com/en-us/library/aa478965.aspx

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

Чтобы включить отдельный кеш записи для каждого браузера, VaryByCustom может быть установлено значение "браузер". Эта функциональность встроена в модуль кеширования, и будет вставлять отдельные кешированные версии страницы для каждого имени браузера и основного версия.

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"  %>

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