How to pull a ViewComponent outside a response cached controller's action in ASP.NET Core











up vote
0
down vote

favorite












For performance purpose, i need to put the homepage action into the cache and display the name of the logged-in user in the homepage's header.
I used to implement the devtrends/DonutOutputCache on classic ASP.NET project. This system was very useful, because you were able to put a whole action in OutputCache while pulling partial view results outside the cache.
I could have 3 or 4 partials who needed personalization (A survey, an analytic tag, the user name and avatar, a behavior based article list...).



Do you know if I could handle this with ASP.NET CORE's new OutputCacheAttribute or CacheTagHelpers ?



At the moment, I put the whole HomePage datas into classic memory cache.



It would be fantastic to have this kind of 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>









share|improve this question






















  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
    – Neal
    Nov 21 at 13:23















up vote
0
down vote

favorite












For performance purpose, i need to put the homepage action into the cache and display the name of the logged-in user in the homepage's header.
I used to implement the devtrends/DonutOutputCache on classic ASP.NET project. This system was very useful, because you were able to put a whole action in OutputCache while pulling partial view results outside the cache.
I could have 3 or 4 partials who needed personalization (A survey, an analytic tag, the user name and avatar, a behavior based article list...).



Do you know if I could handle this with ASP.NET CORE's new OutputCacheAttribute or CacheTagHelpers ?



At the moment, I put the whole HomePage datas into classic memory cache.



It would be fantastic to have this kind of 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>









share|improve this question






















  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
    – Neal
    Nov 21 at 13:23













up vote
0
down vote

favorite









up vote
0
down vote

favorite











For performance purpose, i need to put the homepage action into the cache and display the name of the logged-in user in the homepage's header.
I used to implement the devtrends/DonutOutputCache on classic ASP.NET project. This system was very useful, because you were able to put a whole action in OutputCache while pulling partial view results outside the cache.
I could have 3 or 4 partials who needed personalization (A survey, an analytic tag, the user name and avatar, a behavior based article list...).



Do you know if I could handle this with ASP.NET CORE's new OutputCacheAttribute or CacheTagHelpers ?



At the moment, I put the whole HomePage datas into classic memory cache.



It would be fantastic to have this kind of 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>









share|improve this question













For performance purpose, i need to put the homepage action into the cache and display the name of the logged-in user in the homepage's header.
I used to implement the devtrends/DonutOutputCache on classic ASP.NET project. This system was very useful, because you were able to put a whole action in OutputCache while pulling partial view results outside the cache.
I could have 3 or 4 partials who needed personalization (A survey, an analytic tag, the user name and avatar, a behavior based article list...).



Do you know if I could handle this with ASP.NET CORE's new OutputCacheAttribute or CacheTagHelpers ?



At the moment, I put the whole HomePage datas into classic memory cache.



It would be fantastic to have this kind of 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>






razor asp.net-core outputcache asp.net-core-viewcomponent responsecache






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 at 13:16









Bidasse

33




33












  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
    – Neal
    Nov 21 at 13:23


















  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
    – Neal
    Nov 21 at 13:23
















See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
– Neal
Nov 21 at 13:23




See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
– Neal
Nov 21 at 13:23












1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










I'm not sure about what you were using previously, but I don't think it was actually doing what you think. The whole point of an output cache is bypassing the view rendering process, as such, whatever you cache is just returned as-is, not further processed to determine if something inside needs to be rendered.



If you cache your entire page, then you cannot have any part inside that needs to vary per user. You'll simply need to reduce the scope of what you're caching. Cache the parts of the page that don't vary, and that will at least give the main page a leg up in rendering. This is what the cache tag helper is for. You can also cache just for a particular user with this tag helper:



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


This will still render multiple times, but only once per user. After it has been cached for a particular user, then the cache will be used.






share|improve this answer





















  • Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
    – Bidasse
    Nov 22 at 15:38











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412902%2fhow-to-pull-a-viewcomponent-outside-a-response-cached-controllers-action-in-asp%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote



accepted










I'm not sure about what you were using previously, but I don't think it was actually doing what you think. The whole point of an output cache is bypassing the view rendering process, as such, whatever you cache is just returned as-is, not further processed to determine if something inside needs to be rendered.



If you cache your entire page, then you cannot have any part inside that needs to vary per user. You'll simply need to reduce the scope of what you're caching. Cache the parts of the page that don't vary, and that will at least give the main page a leg up in rendering. This is what the cache tag helper is for. You can also cache just for a particular user with this tag helper:



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


This will still render multiple times, but only once per user. After it has been cached for a particular user, then the cache will be used.






share|improve this answer





















  • Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
    – Bidasse
    Nov 22 at 15:38















up vote
0
down vote



accepted










I'm not sure about what you were using previously, but I don't think it was actually doing what you think. The whole point of an output cache is bypassing the view rendering process, as such, whatever you cache is just returned as-is, not further processed to determine if something inside needs to be rendered.



If you cache your entire page, then you cannot have any part inside that needs to vary per user. You'll simply need to reduce the scope of what you're caching. Cache the parts of the page that don't vary, and that will at least give the main page a leg up in rendering. This is what the cache tag helper is for. You can also cache just for a particular user with this tag helper:



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


This will still render multiple times, but only once per user. After it has been cached for a particular user, then the cache will be used.






share|improve this answer





















  • Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
    – Bidasse
    Nov 22 at 15:38













up vote
0
down vote



accepted







up vote
0
down vote



accepted






I'm not sure about what you were using previously, but I don't think it was actually doing what you think. The whole point of an output cache is bypassing the view rendering process, as such, whatever you cache is just returned as-is, not further processed to determine if something inside needs to be rendered.



If you cache your entire page, then you cannot have any part inside that needs to vary per user. You'll simply need to reduce the scope of what you're caching. Cache the parts of the page that don't vary, and that will at least give the main page a leg up in rendering. This is what the cache tag helper is for. You can also cache just for a particular user with this tag helper:



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


This will still render multiple times, but only once per user. After it has been cached for a particular user, then the cache will be used.






share|improve this answer












I'm not sure about what you were using previously, but I don't think it was actually doing what you think. The whole point of an output cache is bypassing the view rendering process, as such, whatever you cache is just returned as-is, not further processed to determine if something inside needs to be rendered.



If you cache your entire page, then you cannot have any part inside that needs to vary per user. You'll simply need to reduce the scope of what you're caching. Cache the parts of the page that don't vary, and that will at least give the main page a leg up in rendering. This is what the cache tag helper is for. You can also cache just for a particular user with this tag helper:



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


This will still render multiple times, but only once per user. After it has been cached for a particular user, then the cache will be used.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 21 at 14:10









Chris Pratt

150k20231296




150k20231296












  • Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
    – Bidasse
    Nov 22 at 15:38


















  • Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
    – Bidasse
    Nov 22 at 15:38
















Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
– Bidasse
Nov 22 at 15:38




Thank you, you're probably right, I should split my homepage controller into multiple cachable ViewComponents. The user specific's content would be outside the cache tags.
– Bidasse
Nov 22 at 15:38


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412902%2fhow-to-pull-a-viewcomponent-outside-a-response-cached-controllers-action-in-asp%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Berounka

Sphinx de Gizeh

Different font size/position of beamer's navigation symbols template's content depending on regular/plain...