Skip to content

fix: Refactor menus app: significant time saving (queries and cpu) #7956

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 46 commits into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
d035ecf
Refactor cms_menus.py: CPU time saving ~45% (measured with ~50.000 pa…
fsbraun Jul 11, 2024
c04d30b
Remove page content lookup from the loop
fsbraun Jul 12, 2024
b8ac3d5
Fix db accesses
fsbraun Jul 12, 2024
169410b
Optimize menu tags, especially `cut_levels
fsbraun Jul 13, 2024
423b9be
Fix EmptyPageContent regression
fsbraun Jul 13, 2024
7f98b72
chore: update signature of `cut_after
fsbraun Jul 13, 2024
354eb71
Refactor cms_menus
fsbraun Jul 15, 2024
900583b
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 17, 2024
6ebc40f
Save one big query: Remove the need for page content prefetch (saving…
fsbraun Jul 17, 2024
642806a
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 17, 2024
29a48ba
Adjust tests and add release note deprecation information
fsbraun Jul 17, 2024
307a747
Merge branch 'feat/menu-perf' of github.com:fsbraun/django-cms into f…
fsbraun Jul 17, 2024
f7aaf06
Remove debugging code
fsbraun Jul 17, 2024
6bd57d0
Update test to reflect lower query number
fsbraun Jul 17, 2024
d765d04
Respect PageContentAdmin `get_queryset` in pagetree.
fsbraun Jul 17, 2024
b67c4e3
Refactor cms_menus.py: CPU time saving ~45% (measured with ~50.000 pa…
fsbraun Jul 11, 2024
15fab3c
Remove page content lookup from the loop
fsbraun Jul 12, 2024
d607dc1
Fix db accesses
fsbraun Jul 12, 2024
b02d5bb
Optimize menu tags, especially `cut_levels
fsbraun Jul 13, 2024
2c48ef3
Fix EmptyPageContent regression
fsbraun Jul 13, 2024
a4ebe35
chore: update signature of `cut_after
fsbraun Jul 13, 2024
34d60aa
Refactor cms_menus
fsbraun Jul 15, 2024
39efa99
Save one big query: Remove the need for page content prefetch (saving…
fsbraun Jul 17, 2024
8b313ab
Adjust tests and add release note deprecation information
fsbraun Jul 17, 2024
d99bebd
Remove debugging code
fsbraun Jul 17, 2024
7d822f3
Update test to reflect lower query number
fsbraun Jul 17, 2024
5b554dd
Respect PageContentAdmin `get_queryset` in pagetree.
fsbraun Jul 17, 2024
1e1363b
Merge branch 'feat/menu-perf' of github.com:fsbraun/django-cms into f…
fsbraun Jul 22, 2024
a073df5
Add docsstrings
fsbraun Jul 22, 2024
2c7eba7
Improve naming
fsbraun Jul 22, 2024
ab416e0
Add compatibility shim for `get_node_for_page` function.
fsbraun Jul 22, 2024
4d938e1
Fix deprecation warning
fsbraun Jul 22, 2024
63926a1
Extend tests
fsbraun Jul 23, 2024
d0cf6d1
Add deprecation message to Level modifier docstring
fsbraun Jul 23, 2024
c415eb6
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 23, 2024
8440182
Ensure availability of `languages` property in `CMSMenu
fsbraun Jul 24, 2024
5314d9b
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 24, 2024
7b4875a
Optimize page content admin by prefetching the page object
fsbraun Jul 25, 2024
e3d5791
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 29, 2024
fdef07e
Update docstrings
fsbraun Jul 29, 2024
6c3ddf7
Merge branch 'feat/menu-perf' of github.com:fsbraun/django-cms into f…
fsbraun Jul 29, 2024
ba2cd72
Query optimization from #7887
fsbraun Jul 29, 2024
31e8a82
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 29, 2024
82c26e8
Remove duplicate `"page__is_home"` from `.only()` expression
fsbraun Jul 31, 2024
84d6bae
Merge branch 'develop-4' into feat/menu-perf
fsbraun Jul 31, 2024
f3262a6
Merge branch 'develop-4' into feat/menu-perf
fsbraun Aug 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cms/admin/pageadmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,7 @@ def get_preserved_filters(self, request):
def get_queryset(self, request):
site = get_site(request)
languages = get_language_list(site.pk)
queryset = super().get_queryset(request)
queryset = super().get_queryset(request).select_related('page')
queryset = queryset.filter(language__in=languages, page__site=site)
return queryset

Expand Down Expand Up @@ -1400,7 +1400,7 @@ def get_tree(self, request):
Prefetch(
'pagecontent_set',
to_attr='filtered_translations',
queryset=PageContent.admin_manager.get_queryset(),
queryset=self.get_queryset(request),
),
)
rows = self.get_tree_rows(
Expand Down
452 changes: 267 additions & 185 deletions cms/cms_menus.py

Large diffs are not rendered by default.

11 changes: 5 additions & 6 deletions cms/models/pagemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,11 @@ def __str__(self):
try:
title = self.get_menu_title(fallback=True)
except LanguageError:
try:
title = self.pagecontent_set(manager="admin_manager").current()[0]
except IndexError:
title = None
title = self.pagecontent_set(manager="admin_manager").current_content().first()
if title:
title = title.title
if title is None:
title = ""
title = _("Empty")
return force_str(title)

def __repr__(self):
Expand Down Expand Up @@ -778,7 +777,7 @@ def get_path(self, language, fallback=True):

if language not in self.urls_cache:
self.urls_cache.update({
url.language: url for url in self.urls.filter(language__in=languages) # TODO: overwrites multiple urls
url.language: url for url in self.urls.all() if url.language in languages # TODO: overwrites multiple urls
})

for _language in languages:
Expand Down
Loading
Loading