chore: Improve pagecontent caching in page admin (esp. page tree) #8002
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Historically, django CMS has used a python cache on model level for page content objects:
page.page_content_cache
.Since django CMS 4., this cache is filled either with user-visible objects (using the default
objects
manager) or with admin-visible objects, using theadmin_manager
manager. Since each request is, either from the user side or the admin side, this same cache can be used to hold different sets of page content objects. A side effect, however, lead to some page titles in fallback languages not to be shown in the page tree.It turns out, however, that this was not consistently done, leading to unnecessary cache misses.
This PR splits the caches into
page_content_cache
(traditional, user-facing) andadmin_content_cache
for the page admin, to make sure no side effects can happen.This improves the cache hits and reduces the number of database hits for the page tree effectively removing a hidden N+1 issue. The response time should improve by 20%+ (tested with local sqlite).
Related resources
Checklist
develop-4