When using macro caching or @Html.CachedPartial, what is the difference whether "Cache by page" is true or is false?
As I understand it, if the macro or partial view would be used on one page only, there would be no difference. It this correct? That is, is "Cache by page" only useful if the macro or partial view is used in two or more pages?
And, will the cache auto-refresh itself when the cache period time runs out? Or will it wait for a active page visit, i.e., if caching time is set to 1 hour, and a person A visits the page 2.00 pm., and then again 3.30 pm. (we assume no other visitors at all), would the first cache be at time 2 pm. and the new cache at 3pm or 3.30 pm?
Yes, 'cache by page' will add a version of the output of the macro to the cache for each page.
So if the Macro produces the exact same html on every page, you shouldn't tick 'cache by page',
But in the case of for example, a macro producing a Breadcrumb, you would want to tick 'cache by page', because otherwise the same breadcrumb would appear on each page, which would be wrong.
Whenever any item is published the entire macro cache is cleared.
In terms of the cache period, it will be the next request to the page, that will check to see if the item's cache period has expired, so in your example, the new cache would be at 3:30pm
As a follow up question, do you know a good way to implement a server side re-caching i.e., to make the cache update itself automatically when the cache period runs out. For example, would it be possible to set an 1 hour "auto-recache"?
With this markup the "Cache by page" is default false, that is, the breadcrumb should be the same on all pages but it still work as the Uncached. So I wonder if I also need to enable caching somewhere else in Umbraco
with the 1 hour auto-refresh, what are you trying to achieve ?
ie are you thinking that you want the cache to run out after an hour, then get updated values, and put itself back in the cache, ready for the next request, even if no request is made ?
There are tricks outside of Umbraco with the .net framework for caching objects with a cache expiry call back function, that fires when the item disappears from cache; but this is different to Umbraco Macro caching.
I suppose you could schedule a task, to request a url that would cause the Macro cache to be rebuilt each hour:
ie in umbracoSettings:
<scheduledTasks>
<!-- add tasks that should be called with an interval (seconds) -->
<task log="true" alias="tcachebreak" interval="3600" url="http://localhost/umbraco/urlofpagewithmacro"/>
</scheduledTasks>
Thanks for you response Marc. Basically, what I was aiming at was to ensure that some "time heavy" partial always stays cached so that a visitor never will expires loading time more that 5-6 seconds. But I will have a go with the scheduled tasks.
By the way, my current web host has a 3 hour idle application pool shut down, that is, during night I don't have no visitors and the first one in the morning will have to wait for the pool start-up (takes to long). My web host recommended setting up a cron-job to ensure that the pool never shuts down due to the maximum idle time span.
Would you say that a scheduled task would would be sufficient for such a "cron job" ? I mean, will a scheduled task trigger page request at my web host?
Cache by page false vs. true, and caching refresh
Hi,
When using macro caching or @Html.CachedPartial, what is the difference whether "Cache by page" is true or is false?
As I understand it, if the macro or partial view would be used on one page only, there would be no difference. It this correct? That is, is "Cache by page" only useful if the macro or partial view is used in two or more pages?
And, will the cache auto-refresh itself when the cache period time runs out? Or will it wait for a active page visit, i.e., if caching time is set to 1 hour, and a person A visits the page 2.00 pm., and then again 3.30 pm. (we assume no other visitors at all), would the first cache be at time 2 pm. and the new cache at 3pm or 3.30 pm?
Best regards, Martin
Hi Martin,
Yes, 'cache by page' will add a version of the output of the macro to the cache for each page.
So if the Macro produces the exact same html on every page, you shouldn't tick 'cache by page',
But in the case of for example, a macro producing a Breadcrumb, you would want to tick 'cache by page', because otherwise the same breadcrumb would appear on each page, which would be wrong.
Whenever any item is published the entire macro cache is cleared.
In terms of the cache period, it will be the next request to the page, that will check to see if the item's cache period has expired, so in your example, the new cache would be at 3:30pm
Thanks Marc!
As a follow up question, do you know a good way to implement a server side re-caching i.e., to make the cache update itself automatically when the cache period runs out. For example, would it be possible to set an 1 hour "auto-recache"?
I just tested the breadcrumb idea. but I don't get the cache to work.
Uncached:
Cached:
With this markup the "Cache by page" is default false, that is, the breadcrumb should be the same on all pages but it still work as the Uncached. So I wonder if I also need to enable caching somewhere else in Umbraco
Make sure debug is set to false in the web.config, otherwise it won't work.
More info: http://issues.umbraco.org/issue/U4-5940
Thanks alot. That's explains it.
Hi Martin
with the 1 hour auto-refresh, what are you trying to achieve ?
ie are you thinking that you want the cache to run out after an hour, then get updated values, and put itself back in the cache, ready for the next request, even if no request is made ?
There are tricks outside of Umbraco with the .net framework for caching objects with a cache expiry call back function, that fires when the item disappears from cache; but this is different to Umbraco Macro caching.
I suppose you could schedule a task, to request a url that would cause the Macro cache to be rebuilt each hour:
ie in umbracoSettings:
Thanks for you response Marc. Basically, what I was aiming at was to ensure that some "time heavy" partial always stays cached so that a visitor never will expires loading time more that 5-6 seconds. But I will have a go with the scheduled tasks.
By the way, my current web host has a 3 hour idle application pool shut down, that is, during night I don't have no visitors and the first one in the morning will have to wait for the pool start-up (takes to long). My web host recommended setting up a cron-job to ensure that the pool never shuts down due to the maximum idle time span.
Would you say that a scheduled task would would be sufficient for such a "cron job" ? I mean, will a scheduled task trigger page request at my web host?
is working on a reply...