#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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