Opened 3 months ago

Closed 3 months ago

#35229 closed Cleanup/optimization (fixed)

Prevent repeated checks of custom error handler URLs

Reported by: Adam Johnson Owned by: Adam Johnson
Component: Core (System checks) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

In #29642 I added a system check for custom error handler URLs.

I looked at a profile for running the system checks on a project and found this check function ran hundreds of times rather than once, totalling 1/4 of the time to run checks. The multiple runs occur because the check is defined on URLResolver, of which exist in a tree structure. Moving the check from URLResolver to a function in django.core.checks.urls ensures it runs only once.

In the profiled project with 279 URLs, this takes the checks from ~24ms to ~21ms, a ~13% saving.

Change History (4)

comment:1 by Simon Charette, 3 months ago

Triage Stage: UnreviewedAccepted

Do you think it might be worth adding a check running benchmark as well?

comment:2 by Adam Johnson, 3 months ago

It would be nice, but it’s very hard. Many of the performance problems will only appear with scale, with many related models, URLs, etc. I think, for now, it’s more fruitful to profile running checks on real projects.

By the way, this burst of optimization tickets is inspired by a Mastodon discussion about disabling checks because of their slowness: https://mastodon.social/@webology/111715052165307624 . I decided to profile a client project yesterday and work on the clear hot spots.

comment:3 by Mariusz Felisiak, 3 months ago

Owner: changed from nobody to Adam Johnson
Triage Stage: AcceptedReady for checkin

comment:4 by GitHub <noreply@…>, 3 months ago

Resolution: fixed
Status: assignedclosed

In 28a3fbe:

Fixed #35229 -- Made URL custom error handler check run once.

Note: See TracTickets for help on using tickets.
Back to Top