Skip to content

Conversation

@codeflash-ai
Copy link

@codeflash-ai codeflash-ai bot commented Nov 11, 2025

📄 267% (2.67x) speedup for home_page_template in marimo/_server/templates/templates.py

⏱️ Runtime : 7.65 milliseconds 2.08 milliseconds (best of 122 runs)

📝 Explanation and details

The optimization achieves a 267% speedup by implementing three key performance improvements:

1. Caching get_version() calls (major impact)
The original code called is_editable("marimo") repeatedly, which involves expensive package metadata lookups. The optimized version caches this result using function attributes since the editability status cannot change during process lifetime. This eliminates redundant file system operations that were consuming ~58.8% of _get_mount_config's runtime.

2. Optimizing JSON serialization in _get_mount_config
Instead of creating a dictionary comprehension inside the format() call, the optimized version:

  • Pre-resolves the version once instead of calling get_version() in the comprehension
  • Extracts json.dumps to a local variable to avoid repeated attribute lookups
  • Precomputes all JSON strings before formatting

This reduces the JSON serialization overhead from 37% to a much smaller fraction of the function's total time.

3. Batching string replacements in home_page_template
The original code performed individual .replace() calls for each placeholder. The optimized version uses a loop over a pre-built list of replacements, reducing function call overhead and improving code locality.

Performance characteristics by test case:

  • Basic operations: 4-5x speedup (most common usage)
  • Large configs: 1.5-2x speedup (JSON serialization still dominates)
  • Many CSS files: ~2x speedup (I/O operations still the bottleneck)

The optimizations are particularly effective for the common case of template generation with standard-sized configurations, while still providing meaningful improvements for larger workloads. The caching optimization provides the most significant benefit since version checking was the dominant performance bottleneck.

Correctness verification report:

Test Status
⚙️ Existing Unit Tests 🔘 None Found
🌀 Generated Regression Tests 34 Passed
⏪ Replay Tests 🔘 None Found
🔎 Concolic Coverage Tests 🔘 None Found
📊 Tests Coverage 100.0%
🌀 Generated Regression Tests and Runtime

import json

--- Patch points for the function under test ---

import types

imports

import pytest
from marimo._server.templates.templates import home_page_template

--- Minimal stubs and helpers for dependencies ---

class DummyToken:
"""Minimal SkewProtectionToken stub."""
def init(self, value="dummy-token"):
self.value = value
def str(self):
return self.value

def dummy_read_css_file(css_file, filename=None):
"""Stub for read_css_file: returns CSS content for certain paths."""
if css_file == "good.css":
return "body { background: #fff; }"
if css_file == "another.css":
return "h1 { color: blue; }"
return None

--- Minimal config types ---

class DummyConfig(dict):
"""Acts like a dict, but for MarimoConfig/PartialMarimoConfig."""
pass
from marimo._server.templates.templates import home_page_template

--- Test cases ---

Basic template HTML for tests

BASIC_HTML = """

<title>{{ title }}</title>

Welcome!

<script> window.marimoConfig = '{{ mount_config }}'; </script> """

1. BASIC TEST CASES

def test_basic_replacements():
"""Test that all placeholders are replaced correctly."""
user_config = DummyConfig({"foo": "bar"})
config_overrides = DummyConfig({})
token = DummyToken("tok123")
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/my/base/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); html = codeflash_output # 206μs -> 39.3μs (425% faster)

def test_asset_url_replacement():
"""Test that asset URLs are correctly replaced when asset_url is given."""
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
asset_url="https://cdn.example.com/assets",
); html = codeflash_output # 195μs -> 38.2μs (412% faster)

def test_asset_url_with_version_substitution():
"""Test that asset_url with {version} is replaced with the correct version."""
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
asset_url="https://cdn.example.com/assets/{version}",
); html = codeflash_output # 192μs -> 37.6μs (412% faster)

def test_empty_html():
"""Test that an empty HTML string returns an empty string."""
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
"",
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); html = codeflash_output # 227μs -> 39.4μs (479% faster)

def test_html_with_no_placeholders():
"""Test that HTML with no placeholders is unchanged except for custom CSS."""
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
html = "

Static

"
codeflash_output = home_page_template(
html,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); result = codeflash_output # 194μs -> 34.1μs (469% faster)

def test_html_with_partial_placeholders():
"""Test that only present placeholders are replaced."""
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
html = "{{ title }} {{ base_url }}"
codeflash_output = home_page_template(
html,
base_url="/foo/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); result = codeflash_output # 188μs -> 33.6μs (461% faster)

def test_custom_css_empty_list():
"""Test that empty custom_css lists don't inject anything."""
user_config = DummyConfig({"display": {"custom_css": []}})
config_overrides = DummyConfig({"display": {"custom_css": []}})
token = DummyToken()
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); html = codeflash_output # 236μs -> 49.3μs (379% faster)

def test_html_escape_user_config():
"""Test that user_config with special HTML chars is escaped."""
user_config = DummyConfig({"foo": "<script>alert(1)</script>"})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); html = codeflash_output # 198μs -> 40.7μs (389% faster)

def test_large_user_config():
"""Test with a large user_config dict."""
user_config = DummyConfig({str(i): i for i in range(500)})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
BASIC_HTML,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); html = codeflash_output # 386μs -> 188μs (105% faster)

def test_large_html_template():
"""Test with a large HTML template (lots of placeholders)."""
# 500 placeholders for user_config, 500 for base_url
html = (
""
+ " ".join(["{{ user_config }}"] * 500)
+ " "
+ " ".join(["{{ base_url }}"] * 500)
+ ""
)
user_config = DummyConfig({"foo": "bar"})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
html,
base_url="/large/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
); result = codeflash_output # 284μs -> 96.9μs (194% faster)

def test_large_asset_url_replacement():
"""Test asset_url replacement with many asset links."""
html = (
""
+ "".join([f"" for i in range(100)])
+ ""
)
user_config = DummyConfig({})
config_overrides = DummyConfig({})
token = DummyToken()
codeflash_output = home_page_template(
html,
base_url="/",
user_config=user_config,
config_overrides=config_overrides,
server_token=token,
asset_url="https://cdn.example.com/assets",
); result = codeflash_output # 213μs -> 49.3μs (333% faster)
# All links rewritten
for i in range(100):
pass

#------------------------------------------------
import html
import json
from typing import Any, Literal, Optional, Union

imports

import pytest
from marimo._server.templates.templates import home_page_template

--- Minimal stubs for dependencies ---

class SkewProtectionToken:
def init(self, token: str):
self.token = token
def str(self):
return self.token

class MarimoConfig(dict):
pass

class PartialMarimoConfig(dict):
pass

--- Version string ---

version = "1.2.3"

MOUNT_CONFIG_TEMPLATE = "'{{ mount_config }}'"
from marimo._server.templates.templates import home_page_template

--- Unit tests ---

Helper for a basic HTML template

def basic_html_template():
return (
""
"{{ base_url }} {{ title }} {{ filename }} {{ version }} "
"{{ user_config }} {{ server_token }} "
"'{{ mount_config }}'"
""
)

---------------- Basic Test Cases ----------------

def test_basic_replacement():
"""Test all basic placeholder replacements."""
html = basic_html_template()
base_url = "/base"
user_config = MarimoConfig({"foo": "bar"})
config_overrides = PartialMarimoConfig({"baz": "qux"})
server_token = SkewProtectionToken("tok123")
codeflash_output = home_page_template(
html, base_url, user_config, config_overrides, server_token
); result = codeflash_output # 226μs -> 45.2μs (402% faster)

def test_user_config_html_escape():
"""Test user_config with HTML special chars is escaped."""
html = "{{ user_config }}"
user_config = MarimoConfig({"foo": "<script>alert(1)</script>"})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 199μs -> 36.7μs (445% faster)

def test_config_overrides_in_mount_config():
"""Test that config_overrides are present in mount_config."""
html = "'{{ mount_config }}'"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig({"over": 42})
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 192μs -> 33.8μs (470% faster)

def test_asset_url_replacement():
"""Test asset_url replacement for asset links."""
html = "<script src='./bar.js'></script>"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
asset_url = "https://cdn.example.com/assets"
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token, asset_url
); result = codeflash_output # 190μs -> 34.6μs (452% faster)

def test_asset_url_with_version_param():
"""Test asset_url replacement with {version} param."""
html = ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
asset_url = "https://cdn.example.com/{version}/assets"
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token, asset_url
); result = codeflash_output # 191μs -> 34.2μs (460% faster)

def test_inject_custom_css_from_user_config():
"""Test custom CSS injection from user_config."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": ["test.css"]}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 198μs -> 45.4μs (338% faster)

def test_inject_custom_css_from_config_overrides():
"""Test custom CSS injection from config_overrides."""
html = ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig({"display": {"custom_css": ["test.css"]}})
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 194μs -> 41.2μs (372% faster)

def test_no_custom_css_if_missing_file():
"""Test no CSS block injected if file missing."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": ["missing.css"]}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 199μs -> 43.4μs (359% faster)

def test_multiple_custom_css():
"""Test injection of multiple custom CSS files."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": ["test.css", "empty.css", "missing.css"]}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 203μs -> 47.7μs (327% faster)
# empty.css and missing.css should not be injected

---------------- Edge Test Cases ----------------

def test_empty_html_template():
"""Test with empty HTML string."""
html = ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 187μs -> 31.2μs (500% faster)

def test_html_no_placeholders():
"""Test HTML with no placeholders."""
html = "No placeholders here"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 186μs -> 31.1μs (498% faster)

def test_custom_css_empty_list():
"""Test custom_css is empty list."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": []}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 192μs -> 35.1μs (449% faster)

def test_custom_css_none():
"""Test custom_css is None."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": None}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 188μs -> 34.7μs (443% faster)

def test_custom_css_nonexistent_key():
"""Test display key missing."""
html = ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 188μs -> 31.3μs (504% faster)

def test_server_token_empty_string():
"""Test server token is an empty string."""
html = "{{ server_token }}"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 190μs -> 31.9μs (498% faster)

def test_user_config_empty_dict():
"""Test user_config is empty dict."""
html = "{{ user_config }}"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 192μs -> 32.0μs (500% faster)

def test_config_overrides_empty_dict():
"""Test config_overrides is empty dict."""
html = "'{{ mount_config }}'"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 188μs -> 31.9μs (490% faster)

def test_asset_url_none():
"""Test asset_url is None (should not replace asset links)."""
html = ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
asset_url = None
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token, asset_url
); result = codeflash_output # 188μs -> 31.2μs (506% faster)

def test_custom_css_in_config_overrides_and_user_config():
"""Test custom CSS in both user_config and config_overrides."""
html = ""
user_config = MarimoConfig({"display": {"custom_css": ["test.css"]}})
config_overrides = PartialMarimoConfig({"display": {"custom_css": ["test.css"]}})
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 198μs -> 48.8μs (307% faster)

---------------- Large Scale Test Cases ----------------

def test_large_user_config():
"""Test with a large user_config dict."""
html = "'{{ mount_config }}'"
# 1000 key-value pairs
user_config = MarimoConfig({f"k{i}": f"v{i}" for i in range(1000)})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 497μs -> 306μs (62.6% faster)
# All keys should appear in the mount_config JSON
for i in range(0, 1000, 200): # Sample every 200 for speed
pass

def test_large_custom_css_injection():
"""Test injection of many custom CSS files."""
html = ""
css_files = [f"bulk{i}.css" for i in range(100)]
user_config = MarimoConfig({"display": {"custom_css": css_files}})
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 356μs -> 190μs (86.7% faster)

def test_large_asset_url_replacement():
"""Test asset_url replacement with many asset links."""
asset_links = "".join(
f"<script src='./file{i}.js'></script>"
for i in range(500)
)
html = asset_links + ""
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig()
server_token = SkewProtectionToken("tok")
asset_url = "https://cdn.example.com/assets"
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token, asset_url
); result = codeflash_output # 291μs -> 125μs (132% faster)
# Check a few random replacements
for i in [0, 100, 250, 499]:
pass

def test_large_mount_config_output():
"""Test mount_config output with large config_overrides."""
html = "'{{ mount_config }}'"
user_config = MarimoConfig()
config_overrides = PartialMarimoConfig({f"c{i}": i for i in range(500)})
server_token = SkewProtectionToken("tok")
codeflash_output = home_page_template(
html, "/", user_config, config_overrides, server_token
); result = codeflash_output # 277μs -> 111μs (148% faster)
# Check a few keys
for i in [0, 100, 250, 499]:
pass

codeflash_output is used to check that the output of the original code is the same as that of the optimized code.

To edit these changes git checkout codeflash/optimize-home_page_template-mhu3ipo7 and push.

Codeflash Static Badge

The optimization achieves a **267% speedup** by implementing three key performance improvements:

**1. Caching `get_version()` calls (major impact)**
The original code called `is_editable("marimo")` repeatedly, which involves expensive package metadata lookups. The optimized version caches this result using function attributes since the editability status cannot change during process lifetime. This eliminates redundant file system operations that were consuming ~58.8% of `_get_mount_config`'s runtime.

**2. Optimizing JSON serialization in `_get_mount_config`**
Instead of creating a dictionary comprehension inside the `format()` call, the optimized version:
- Pre-resolves the version once instead of calling `get_version()` in the comprehension
- Extracts `json.dumps` to a local variable to avoid repeated attribute lookups
- Precomputes all JSON strings before formatting

This reduces the JSON serialization overhead from 37% to a much smaller fraction of the function's total time.

**3. Batching string replacements in `home_page_template`**
The original code performed individual `.replace()` calls for each placeholder. The optimized version uses a loop over a pre-built list of replacements, reducing function call overhead and improving code locality.

**Performance characteristics by test case:**
- **Basic operations**: 4-5x speedup (most common usage)
- **Large configs**: 1.5-2x speedup (JSON serialization still dominates)
- **Many CSS files**: ~2x speedup (I/O operations still the bottleneck)

The optimizations are particularly effective for the common case of template generation with standard-sized configurations, while still providing meaningful improvements for larger workloads. The caching optimization provides the most significant benefit since version checking was the dominant performance bottleneck.
@codeflash-ai codeflash-ai bot requested a review from mashraf-222 November 11, 2025 04:53
@codeflash-ai codeflash-ai bot added ⚡️ codeflash Optimization PR opened by Codeflash AI 🎯 Quality: High Optimization Quality according to Codeflash labels Nov 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚡️ codeflash Optimization PR opened by Codeflash AI 🎯 Quality: High Optimization Quality according to Codeflash

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant