This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients eric.smith, georg.brandl, serhiy.storchaka
Date 2016-09-29.09:01:25
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1475139686.03.0.137512666256.issue28309@psf.upfronthosting.co.za>
In-reply-to
Content
Proposed patch makes string.Template compiling template to formatted string literal. Since for now using formatted string literals is the fastest way of formatting strings, this significantly speeds up Template substitution.

$ ./python -m perf timeit -s 'from string import Template; s = Template("$who likes $what")' -- 's.substitute(who="tim", what="ham")'

Unpatched:  Median +- std dev: 46.1 us +- 4.2 us
Patched:    Median +- std dev: 11.1 us +- 0.5 us

The drawback is that compiling template adds high overhead.

$ ./python -m perf timeit -s 'from string import Template' -- 's = Template("$who likes $what"); s.substitute(who="tim", what="ham")'

Unpatched:  Median +- std dev: 51.7 us +- 1.5 us
Patched:    Median +- std dev: 672 us +- 38 us

The benefit of using compiled templates is achieved only if make at least 20 substitutions with the same template.

Third-party template engines can use the same approach in Python 3.6+.
History
Date User Action Args
2016-09-29 09:01:26serhiy.storchakasetrecipients: + serhiy.storchaka, georg.brandl, eric.smith
2016-09-29 09:01:26serhiy.storchakasetmessageid: <1475139686.03.0.137512666256.issue28309@psf.upfronthosting.co.za>
2016-09-29 09:01:25serhiy.storchakalinkissue28309 messages
2016-09-29 09:01:25serhiy.storchakacreate