#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 [email protected].
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