#25753: Cache formats retrieved from django settings in formats.get_format
-------------------------------------+-------------------------------------
     Reporter:  jaap3                |                    Owner:  nobody
         Type:                       |                   Status:  new
  Cleanup/optimization               |
    Component:  Utilities            |                  Version:  master
     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
-------------------------------------+-------------------------------------
Changes (by jaap3):

 * needs_better_patch:   => 0
 * needs_tests:   => 0
 * needs_docs:   => 0


Old description:

> If L10N is disabled `formats.get_format` always goes through django's
> settings module to get the requested format type. Accessing settings is
> fairly expensive, so I propose caching these values in the same way the
> values are already cached when L10N is enabled.
>
> {{{
> import timeit
> import django
> from django.conf import settings
> from django.utils.formats import get_format
>
> settings.configure()
> django.setup()
>
> print('%s' % timeit.repeat("get_format('DATETIME_INPUT_FORMATS')",
> setup='from __main__ import get_format'))
> }}}
>
> Before:
>
> `[4.791080316994339, 4.822412799010635, 4.568255095000495]`
>
> After:
>
> `[2.801479902002029, 2.874774623007397, 2.796864636009559]`
>
> The performance remains the same for when L10N is enabled (e.g. replace
> `settings.configure()` with `settings.configure(USE_L10N=True,
> LANGUAGE_CODE='nl')`)

New description:

 If L10N is disabled `formats.get_format` always goes through Django's
 settings module to get the requested format type. Accessing settings is
 fairly expensive, so I propose caching these values in the same way as
 when L10N is enabled.

 {{{
 import timeit
 import django
 from django.conf import settings
 from django.utils.formats import get_format

 settings.configure()
 django.setup()

 print('%s' % timeit.repeat("get_format('DATETIME_INPUT_FORMATS')",
 setup='from __main__ import get_format'))
 }}}

 Before:

 `[4.791080316994339, 4.822412799010635, 4.568255095000495]`

 After:

 `[2.801479902002029, 2.874774623007397, 2.796864636009559]`

 The performance remains the same for when L10N is enabled (e.g. replace
 `settings.configure()` with `settings.configure(USE_L10N=True,
 LANGUAGE_CODE='nl')`)

--

--
Ticket URL: <https://code.djangoproject.com/ticket/25753#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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/063.539f8c3332f450834bda84e4c9f0bb12%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to