From a7c69808ac11f938e509d64348eb9413e869ab21 Mon Sep 17 00:00:00 2001 From: Sir Phillip Tubell Date: Fri, 12 Jun 2026 15:18:38 -0400 Subject: [PATCH] perf: convert _walk_js_tree from recursive generator to iterative Eliminates O(depth) generator-frame chain overhead. Each leaf's value previously propagated through 26+ yield-from frames; now a single stack loop handles the full traversal. --- graphify/extract.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/graphify/extract.py b/graphify/extract.py index 5cae711d..f294ea76 100644 --- a/graphify/extract.py +++ b/graphify/extract.py @@ -7189,9 +7189,14 @@ def _parse_js_tree(path: Path): def _walk_js_tree(node): - yield node - for child in node.children: - yield from _walk_js_tree(child) + # Iterative DFS avoids Python's O(depth) generator-chain overhead. + # Recursive yield-from creates one generator frame per level — at 26+ + # levels deep each leaf's value had to propagate through 26 frames. + stack = [node] + while stack: + n = stack.pop() + yield n + stack.extend(reversed(n.children)) def _js_module_specifier(node, source: bytes) -> str | None: