Как вытащить ViewComponent за пределы действия кэшированного в ответе контроллера в ASP.NET Core - PullRequest
0 голосов
/ 21 ноября 2018

В целях повышения производительности мне нужно поместить действие домашней страницы в кэш и отобразить имя вошедшего в систему пользователя в заголовке домашней страницы.Я использовал для реализации devtrends / DonutOutputCache в классическом проекте ASP.NET.Эта система была очень полезна, потому что вы могли поместить целое действие в OutputCache, извлекая результаты частичного просмотра из кэша.У меня может быть 3 или 4 части, которые нуждаются в персонализации (опрос, аналитическая метка, имя пользователя и аватар, список статей, основанный на поведении ...).

Знаете ли вы, могу ли я справиться с этим с ASPНовый OutputCacheAttribute или. CacheTagHelpers .NET CORE?

В данный момент я помещаю все данные HomePage в классический кеш-память.

Было бы здорово иметь такой TagHelper:

<cache expires-after="TimeSpan.FromMinutes(60)">
  @*Cached part*@
  <cache-hole>
   @*Refreshed on each page refresh. This could work with a ResponseCache attribute too.*@
   @await Components.InvokeAsync("UserProfile")
  </cache-hole>
</cache>

1 Ответ

0 голосов
/ 21 ноября 2018

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

Если вы кешируетевсю страницу, то вы не можете иметь внутри какую-либо часть, которая должна варьироваться для каждого пользователя.Вам просто нужно уменьшить объем того, что вы кэшируете.Кэшируйте части страницы, которые не меняются, и это, по крайней мере, даст главной странице преимущество в рендеринге.Для этого и нужен помощник по тегам cache.Вы также можете кэшировать только для конкретного пользователя с помощью этого помощника тега:

<cache vary-by-user="true">
    <!-- user-specific stuff -->
</cache>

Это все равно будет отображаться несколько раз, но только один раз для каждого пользователя.После того, как он был кэширован для конкретного пользователя, будет использоваться кеш.

...