#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>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018dbe33dd92-c39a2a66-02ab-488d-aaba-23c4439c9452-000000%40eu-central-1.amazonses.com.

Reply via email to