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>
razor asp.net-core outputcache asp.net-core-viewcomponent responsecache
add a comment |
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>
razor asp.net-core outputcache asp.net-core-viewcomponent responsecache
See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
– Neal
Nov 21 at 13:23
add a comment |
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>
razor asp.net-core outputcache asp.net-core-viewcomponent responsecache
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
razor asp.net-core outputcache asp.net-core-viewcomponent responsecache
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
add a comment |
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
add a comment |
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.
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
add a comment |
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.
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
add a comment |
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.
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
add a comment |
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.
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
See if this helps: docs.microsoft.com/en-us/aspnet/core/performance/caching/…
– Neal
Nov 21 at 13:23