#36867: Optimize template compilation with intelligent caching for repeated 
renders
-------------------------------------+-------------------------------------
     Reporter:  TheAshutoshMishra    |                     Type:  New
                                     |  feature
       Status:  new                  |                Component:  Template
                                     |  system
      Version:  6.0                  |                 Severity:  Normal
     Keywords:  templates,           |             Triage Stage:
  performance, caching,              |  Unreviewed
  optimization                       |
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
 Currently, Django's template system performs expensive compilation
 operations (tokenization and filter expression parsing) on every template
 render, even when rendering the same template repeatedly with different
 contexts. This causes unnecessary CPU overhead in production.

 === Problem ===

 The template compilation process involves:
 1. **Tokenization**: Regex splitting of template strings via
 `tag_re.split()`
 2. **Filter expression compilation**: Parsing filter syntax like `{{
 var|filter:"arg" }}`

 Both operations are repeated identically for every render, even though the
 results are deterministic based on the template source.

 === Proposed Solution ===

 Add bounded, memory-safe caching for:
 1. **Tokenized template strings** (max 1000 entries, hash-based keys)
 2. **Compiled FilterExpression objects** (max 500 entries)

 === Implementation Details ===

 - Hash-based cache keys for O(1) lookups
 - Smart eviction: removes 20-25% of oldest entries when limit reached
 - Skips caching for stateful verbatim templates
 - Graceful fallbacks for edge cases
 - New `clear_template_caches()` utility for production cache management

 === Performance Impact (Measured) ===

 - **13-47% faster** template rendering on repeated renders
 - **1.15M tokenizations/second** throughput with caching
 - Zero configuration required
 - Fully backward compatible

 === PR ===

 Implementation available in PR #20540:
 https://github.com/django/django/pull/20540

 Looking for feedback on this approach and guidance on adding comprehensive
 test coverage.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36867>
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 visit 
https://groups.google.com/d/msgid/django-updates/0107019bc1b912b5-e0a9e042-a6dc-4c08-9937-865788c65f32-000000%40eu-central-1.amazonses.com.

Reply via email to