kopia lustrzana https://github.com/wagtail/wagtail
Remove unnecessary queries from userbar
- This drops the number of queries from 9 to 5 - Add test for userbar with revisions - The previous performance change dropped queries from 13 to 7pull/9084/head
rodzic
efe8f17280
commit
8cf8b6fd59
|
@ -9,6 +9,7 @@ Changelog
|
|||
* Add `PageQuerySet.private` method as an alias of `not_public` (Mehrdad Moradizadeh)
|
||||
* Most images in the admin will now only load once they are visible on screen (Jake Howard)
|
||||
* Allow setting default attributes on image tags (Jake Howard)
|
||||
* Optimise the performance of the Wagtail userbar to remove duplicated queries, improving page loads when viewing live pages while signed in (Jake Howard)
|
||||
* Fix: Prevent `PageQuerySet.not_public` from returning all pages when no page restrictions exist (Mehrdad Moradizadeh)
|
||||
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ Wagtail 4.1 is designated a Long Term Support (LTS) release. Long Term Support r
|
|||
* Add `PageQuerySet.private` method as an alias of `not_public` (Mehrdad Moradizadeh)
|
||||
* Most images in the admin will now only load once they are visible on screen (Jake Howard)
|
||||
* Allow setting default attributes on image tags [](adding_default_attributes_to_images) (Jake Howard)
|
||||
* Optimise the performance of the Wagtail userbar to remove duplicated queries, improving page loads when viewing live pages while signed in (Jake Howard)
|
||||
|
||||
### Bug fixes
|
||||
|
||||
|
|
|
@ -64,28 +64,21 @@ def wagtailuserbar(context, position="bottom-right"):
|
|||
|
||||
if page and page.id:
|
||||
if revision_id:
|
||||
revision = Revision.page_revisions.get(id=revision_id)
|
||||
items = [
|
||||
AdminItem(),
|
||||
ExplorePageItem(
|
||||
Revision.page_revisions.get(id=revision_id).content_object
|
||||
),
|
||||
EditPageItem(
|
||||
Revision.page_revisions.get(id=revision_id).content_object
|
||||
),
|
||||
ApproveModerationEditPageItem(
|
||||
Revision.page_revisions.get(id=revision_id)
|
||||
),
|
||||
RejectModerationEditPageItem(
|
||||
Revision.page_revisions.get(id=revision_id)
|
||||
),
|
||||
ExplorePageItem(revision.content_object),
|
||||
EditPageItem(revision.content_object),
|
||||
ApproveModerationEditPageItem(revision),
|
||||
RejectModerationEditPageItem(revision),
|
||||
]
|
||||
else:
|
||||
# Not a revision
|
||||
items = [
|
||||
AdminItem(),
|
||||
ExplorePageItem(Page.objects.get(id=page.id)),
|
||||
EditPageItem(Page.objects.get(id=page.id)),
|
||||
AddPageItem(Page.objects.get(id=page.id)),
|
||||
ExplorePageItem(page),
|
||||
EditPageItem(page),
|
||||
AddPageItem(page),
|
||||
]
|
||||
else:
|
||||
# Not a page.
|
||||
|
|
|
@ -16,26 +16,46 @@ class TestUserbarTag(TestCase, WagtailTestUtils):
|
|||
)
|
||||
self.homepage = Page.objects.get(id=2)
|
||||
|
||||
def dummy_request(self, user=None, is_preview=False, in_preview_panel=False):
|
||||
def dummy_request(
|
||||
self, user=None, *, is_preview=False, in_preview_panel=False, revision_id=None
|
||||
):
|
||||
request = RequestFactory().get("/")
|
||||
request.user = user or AnonymousUser()
|
||||
request.is_preview = is_preview
|
||||
request.in_preview_panel = in_preview_panel
|
||||
if revision_id:
|
||||
request.revision_id = revision_id
|
||||
return request
|
||||
|
||||
def test_userbar_tag(self):
|
||||
template = Template("{% load wagtailuserbar %}{% wagtailuserbar %}")
|
||||
content = template.render(
|
||||
Context(
|
||||
{
|
||||
PAGE_TEMPLATE_VAR: self.homepage,
|
||||
"request": self.dummy_request(self.user),
|
||||
}
|
||||
)
|
||||
context = Context(
|
||||
{
|
||||
PAGE_TEMPLATE_VAR: self.homepage,
|
||||
"request": self.dummy_request(self.user),
|
||||
}
|
||||
)
|
||||
with self.assertNumQueries(5):
|
||||
content = template.render(context)
|
||||
|
||||
self.assertIn("<!-- Wagtail user bar embed code -->", content)
|
||||
|
||||
def test_userbar_tag_revision(self):
|
||||
self.homepage.save_revision(user=self.user, submitted_for_moderation=True)
|
||||
revision = self.homepage.get_latest_revision()
|
||||
template = Template("{% load wagtailuserbar %}{% wagtailuserbar %}")
|
||||
context = Context(
|
||||
{
|
||||
PAGE_TEMPLATE_VAR: self.homepage,
|
||||
"request": self.dummy_request(self.user, revision_id=revision.id),
|
||||
}
|
||||
)
|
||||
with self.assertNumQueries(7):
|
||||
content = template.render(context)
|
||||
|
||||
self.assertIn("<!-- Wagtail user bar embed code -->", content)
|
||||
self.assertIn("Approve", content)
|
||||
|
||||
def test_userbar_does_not_break_without_request(self):
|
||||
template = Template("{% load wagtailuserbar %}{% wagtailuserbar %}boom")
|
||||
content = template.render(Context({}))
|
||||
|
|
Ładowanie…
Reference in New Issue