#35232: Cache Options.verbose_name_raw
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: | Status: assigned
Cleanup/optimization |
Component: Database layer | Version: dev
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Adam Johnson:
Old description:
> Another candidate for caching, like #35230, following the same system
> check profiling.
>
> The `Model._meta.verbose_name_raw` property returns the stringified
> version of the `verbose_name` attribute whilst temporarily disabling
> translations. It is only used in `django.contrib.auth` for creating
> permission names.
>
> Profiling the system checks on a project with 118 models revealed this
> property was taking ~15% of the total runtime, taking 10ms across 420
> calls. Turning it into a `cached_property` and adding a no-translation
> fast path saves nearly all this cost, making it take <1ms across 105
> calls.
New description:
Another candidate for caching, like #35230, following the same system
check profiling.
The `Model._meta.verbose_name_raw` property returns the stringified
version of the `verbose_name` attribute whilst temporarily disabling
translations. It is only used in `django.contrib.auth` for creating
permission names.
I found this property was taking ~15 of the total runtime for system
checks on a project with 118 models. calls. Turning it into a
`cached_property` and adding a no-translation fast path saves nearly all
this cost, with the below results.
Before: 520 calls taking 10ms
After: 105 calls taking ~0ms
--
--
Ticket URL: <
https://code.djangoproject.com/ticket/35232#comment:1>