# 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 %}
{{ item.description }}
{% endif %}{{ key }}: | {{ value }} |
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' %}" / %} |
No entries
{% endif %}