#35246: Make Field.unique a plain attribute
-------------------------------------+-------------------------------------
               Reporter:  Adam       |          Owner:  Adam Johnson
  Johnson                            |
                   Type:             |         Status:  assigned
  Cleanup/optimization               |
              Component:  Database   |        Version:  dev
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Another candidate for caching, like #35230, #35232 and #35241, following
 the same system check profiling.

 `Field.unique` is a simple property that computes whether a field is
 unique from two inputs:

 {{{
 @property
     def unique(self):
         return self._unique or self.primary_key
 }}}

 The result is immutable because the two input attributes shouldn’t change.

 I found this method was called 3543 times during system checks, taking
 ~0.7% (~0.3ms) of the total runtime on a Python 3.12 project with 118
 models. After moving it to a plain attribute, this cost is eliminated.
 (cProfile’s overhead biases the cost of function calls upwards, so the
 actual saving may be smaller, but probably not too much smaller.)

 `unique` is accessed in many other code paths so this change will help
 those paths too.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35246>
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/0107018dd599eecc-443ce9d3-3e95-47f7-a7c9-2f69c95fab14-000000%40eu-central-1.amazonses.com.

Reply via email to