#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.