Django template fragment caching - is it possible to prerender?
I am looking into Django caching mechanism, namely template fragment caching.
I am planning to cache list of books for every institute, because it takes too long to fetch it and render on every request. I plan to use it like this:
% load cache %
% cache 600 sidebar student.institute %
<List of books for the institute>
% endcache %
If I understand correctly, it will work like this:
For the first request from a student from the institute the list of books will be fetched and rendered, but for all subsequent requests it will be just taken from cache, till the cache invalidates.
So the first request after invalidation is always slow.
Is it possible to automatically pre-fetch and pre-render this template fragment for all possible institutes, so that even the first request would just hit the cache?
django django-templates django-cache
add a comment |
I am looking into Django caching mechanism, namely template fragment caching.
I am planning to cache list of books for every institute, because it takes too long to fetch it and render on every request. I plan to use it like this:
% load cache %
% cache 600 sidebar student.institute %
<List of books for the institute>
% endcache %
If I understand correctly, it will work like this:
For the first request from a student from the institute the list of books will be fetched and rendered, but for all subsequent requests it will be just taken from cache, till the cache invalidates.
So the first request after invalidation is always slow.
Is it possible to automatically pre-fetch and pre-render this template fragment for all possible institutes, so that even the first request would just hit the cache?
django django-templates django-cache
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54
add a comment |
I am looking into Django caching mechanism, namely template fragment caching.
I am planning to cache list of books for every institute, because it takes too long to fetch it and render on every request. I plan to use it like this:
% load cache %
% cache 600 sidebar student.institute %
<List of books for the institute>
% endcache %
If I understand correctly, it will work like this:
For the first request from a student from the institute the list of books will be fetched and rendered, but for all subsequent requests it will be just taken from cache, till the cache invalidates.
So the first request after invalidation is always slow.
Is it possible to automatically pre-fetch and pre-render this template fragment for all possible institutes, so that even the first request would just hit the cache?
django django-templates django-cache
I am looking into Django caching mechanism, namely template fragment caching.
I am planning to cache list of books for every institute, because it takes too long to fetch it and render on every request. I plan to use it like this:
% load cache %
% cache 600 sidebar student.institute %
<List of books for the institute>
% endcache %
If I understand correctly, it will work like this:
For the first request from a student from the institute the list of books will be fetched and rendered, but for all subsequent requests it will be just taken from cache, till the cache invalidates.
So the first request after invalidation is always slow.
Is it possible to automatically pre-fetch and pre-render this template fragment for all possible institutes, so that even the first request would just hit the cache?
django django-templates django-cache
django django-templates django-cache
asked Nov 14 '18 at 13:28
Alexander AbdulovAlexander Abdulov
83
83
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54
add a comment |
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54
add a comment |
0
active
oldest
votes
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
);
);
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%2f53301357%2fdjango-template-fragment-caching-is-it-possible-to-prerender%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
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%2f53301357%2fdjango-template-fragment-caching-is-it-possible-to-prerender%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
For now I've come up with two ideas: 1) Use Celery or other async task scheduler to add the cache manually using low-level cache API 2) Use Celery or other async task scheduler to just imitate requests I need to cache Both of the solutions are not optimal. I still hope to find some better way to do it.
– Alexander Abdulov
Nov 15 '18 at 2:54