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












0















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 '18 at 13:23
















0















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 '18 at 13:23














0












0








0








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 '18 at 13:16









BidasseBidasse

33




33













  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…

    – Neal
    Nov 21 '18 at 13:23



















  • See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…

    – Neal
    Nov 21 '18 at 13:23

















See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…

– Neal
Nov 21 '18 at 13:23





See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…

– Neal
Nov 21 '18 at 13:23












1 Answer
1






active

oldest

votes


















0














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 '18 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',
autoActivateHeartbeat: false,
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









0














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 '18 at 15:38
















0














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 '18 at 15:38














0












0








0







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 '18 at 14:10









Chris PrattChris Pratt

158k20240307




158k20240307













  • 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 '18 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 '18 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 '18 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 '18 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.




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

How to change which sound is reproduced for terminal bell?

Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

Can I use Tabulator js library in my java Spring + Thymeleaf project?