benchmark experimentation (#4811)

* benchmark experimentation

* do the same for test_evaluate_page

* import templates beforehands

* add auto reload

* disable extensions
This commit is contained in:
Khaleel Al-Adhami 2025-02-12 14:51:58 -08:00 committed by GitHub
parent dd5b817f0f
commit d79366d8b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 29 additions and 18 deletions

View File

@ -48,11 +48,10 @@ class ReflexJinjaEnvironment(Environment):
def __init__(self) -> None: def __init__(self) -> None:
"""Set default environment.""" """Set default environment."""
extensions = ["jinja2.ext.debug"]
super().__init__( super().__init__(
extensions=extensions,
trim_blocks=True, trim_blocks=True,
lstrip_blocks=True, lstrip_blocks=True,
auto_reload=False,
) )
self.filters["json_dumps"] = json_dumps self.filters["json_dumps"] = json_dumps
self.filters["react_setter"] = lambda state: f"set{state.capitalize()}" self.filters["react_setter"] = lambda state: f"set{state.capitalize()}"

View File

@ -374,10 +374,10 @@ def _stateful_page():
@pytest.fixture(params=[_simple_page, _complicated_page, _stateful_page]) @pytest.fixture(params=[_simple_page, _complicated_page, _stateful_page])
def unevaluated_page(request): def unevaluated_page(request: pytest.FixtureRequest):
return request.param return request.param
@pytest.fixture(params=[_simple_page, _complicated_page, _stateful_page]) @pytest.fixture(params=[_simple_page, _complicated_page, _stateful_page])
def evaluated_page(request): def evaluated_page(request: pytest.FixtureRequest):
return request.param() return request.param()

View File

@ -1,18 +1,25 @@
import pytest from pytest_codspeed import BenchmarkFixture
from reflex.compiler.compiler import _compile_page, _compile_stateful_components from reflex.compiler.compiler import _compile_page, _compile_stateful_components
from reflex.components.component import Component
@pytest.mark.benchmark def import_templates():
def test_compile_page(evaluated_page): # Importing the templates module to avoid the import time in the benchmark
_compile_page(evaluated_page, None) import reflex.compiler.templates # noqa: F401
@pytest.mark.benchmark def test_compile_page(evaluated_page: Component, benchmark: BenchmarkFixture):
def test_compile_stateful(evaluated_page): import_templates()
_compile_stateful_components([evaluated_page])
benchmark(lambda: _compile_page(evaluated_page, None))
@pytest.mark.benchmark def test_compile_stateful(evaluated_page: Component, benchmark: BenchmarkFixture):
def test_get_all_imports(evaluated_page): import_templates()
evaluated_page._get_all_imports()
benchmark(lambda: _compile_stateful_components([evaluated_page]))
def test_get_all_imports(evaluated_page: Component, benchmark: BenchmarkFixture):
benchmark(lambda: evaluated_page._get_all_imports())

View File

@ -1,6 +1,11 @@
import pytest from typing import Callable
from pytest_codspeed import BenchmarkFixture
from reflex.components.component import Component
@pytest.mark.benchmark def test_evaluate_page(
def test_evaluate_page(unevaluated_page): unevaluated_page: Callable[[], Component], benchmark: BenchmarkFixture
unevaluated_page() ):
benchmark(unevaluated_page)