From 5f206fb2b23325f0e3fea20b781768403b51ff96 Mon Sep 17 00:00:00 2001 From: LebToki <957618+LebToki@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:07:03 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20directory=20filt?= =?UTF-8?q?ering=20in=20countFiles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💡 What: Replaced O(n) in_array() lookup inside the RecursiveCallbackFilterIterator closure with an O(1) isset() lookup against a pre-computed array_flip associative array. 🎯 Why: To improve performance when traversing large directory structures recursively by avoiding repeated array instantiations and linear searches. 📊 Impact: Faster file counting for deep directory structures, reducing time complexity of the filter check from O(n) to O(1). 🔬 Measurement: Run php tests/SecurityTest.php to ensure no regressions. Profile countFiles on a large project. --- public/api/projects.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/api/projects.php b/public/api/projects.php index 1f12af6..1de88e1 100644 --- a/public/api/projects.php +++ b/public/api/projects.php @@ -1235,10 +1235,12 @@ function countFiles($path) { $dirIterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS); // Skip large common directories to improve performance - $filterIterator = new RecursiveCallbackFilterIterator($dirIterator, function ($current, $key, $iterator) { + // ⚡ Bolt: Pre-compute ignored directories as flipped array outside loop for faster O(1) isset() lookups + $ignoredDirs = array_flip(['node_modules', 'vendor', '.git', '__pycache__', '.venv', 'venv', '.idea', '.vscode', 'dist', 'build', 'coverage']); + $filterIterator = new RecursiveCallbackFilterIterator($dirIterator, function ($current, $key, $iterator) use ($ignoredDirs) { if ($iterator->hasChildren()) { $filename = $current->getFilename(); - if (in_array($filename, ['node_modules', 'vendor', '.git', '__pycache__', '.venv', 'venv', '.idea', '.vscode', 'dist', 'build', 'coverage'])) { + if (isset($ignoredDirs[$filename])) { return false; } }