# NOTE: This file is more of a playground than a proper test import timeit from typing import List, Tuple from django.template.base import DebugLexer, Lexer, Token from django_components.util.template_parser import parse_template def django_lexer(template: str) -> List[Token]: """Use Django's built-in lexer to tokenize a template.""" lexer = Lexer(template) return list(lexer.tokenize()) def django_debug_lexer(template: str) -> List[Token]: """Use Django's built-in lexer to tokenize a template.""" lexer = DebugLexer(template) return list(lexer.tokenize()) def run_benchmark(template: str, num_iterations: int = 5000) -> Tuple[float, float]: """Run performance comparison between Django and custom lexer.""" # django_time = timeit.timeit(lambda: django_lexer(template), number=num_iterations) django_debug_time = timeit.timeit(lambda: django_debug_lexer(template), number=num_iterations) custom_time = timeit.timeit(lambda: parse_template(template), number=num_iterations) # return django_time, django_debug_time return django_debug_time, custom_time def print_benchmark_results(template: str, django_time: float, custom_time: float, num_iterations: int) -> None: """Print formatted benchmark results.""" print(f"\nTemplate: {template}") print(f"Iterations: {num_iterations}") print(f"Django Lexer: {django_time:.6f} seconds") print(f"Custom Lexer: {custom_time:.6f} seconds") print(f"Difference: {abs(django_time - custom_time):.6f} seconds") print(f"Custom lexer is {(django_time / custom_time):.2f}x {'faster' if custom_time < django_time else 'slower'}") if __name__ == "__main__": test_cases = [ # Simple text "Hello World", # Simple variable "Hello {{ name }}", # Simple block "{% if condition %}Hello{% endif %}", # Complex nested template """ {% extends "base.html" %} {% block content %}

{{ title }}

{% for item in items %}
{{ item.name }} {% if item.description %}

{{ item.description }}

{% endif %}
{% endfor %} {% endblock %} """, # Component with nested tags """ {% component 'table' headers=headers rows=rows footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" %} """, # Real world example """
{# Info section #}

Project Info

{% if editable %} {% component "Button" href=project_edit_url attrs:class="not-prose" footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" %} Edit Project {% endcomponent %} {% endif %}
{% for key, value in project_info %} {% endfor %}
{{ key }}: {{ value }}
{# Status Updates section #} {% component "ProjectStatusUpdates" project_id=project.pk status_updates=status_updates editable=editable footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" / %}
{# Team section #}

Dcode Team

{% if editable %} {% component "Button" href=edit_project_roles_url attrs:class="not-prose" footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" %} Edit Team {% endcomponent %} {% endif %}
{% component "ProjectUsers" project_id=project.pk roles_with_users=roles_with_users editable=False footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" / %}
{# POCs section #}

Client POCs

{% if editable %} {% component "Button" href=edit_pocs_url attrs:class="not-prose" footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" %} Edit POCs {% endcomponent %} {% endif %}
{% if poc_data %} {% for data in poc_data %} {% endfor %}
Name Job Title Hubspot Profile
{{ data.poc.contact.first_name }} {{ data.poc.contact.last_name }} {{ data.poc.contact.job_title }} {% component "Icon" href=data.hubspot_url name="arrow-top-right-on-square" variant="outline" color="text-gray-400 hover:text-gray-500" footer="{% slot 'footer' %}Total: {{ total }}{% endslot %}" title="{% trans 'Data Table' %}" / %}
{% else %}

No entries

{% endif %}
""", ] for template in test_cases: django_time, custom_time = run_benchmark(template) print_benchmark_results(template, django_time, custom_time, 200)