Skip to content

Commit a6b38ce

Browse files
committed
Optimize: use O(1) item lookup instead of O(M)
When checking $includedFiles for an included file, the previous `in_array()` approach, executed in a loop, is very expensive. Basically, it results in performance of O(N * M), where N - number of declared classes, M - number of included classes. The current approach is O(N), since `isset()` check has constant `O(1)` time.
1 parent c392605 commit a6b38ce

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/Persistence/Mapping/Driver/ColocatedMappingDriver.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use function array_unique;
2020
use function assert;
2121
use function get_declared_classes;
22-
use function in_array;
2322
use function is_dir;
2423
use function preg_match;
2524
use function preg_quote;
@@ -158,7 +157,8 @@ public function getAllClassNames(): array
158157
}
159158

160159
$sourceFilePathNames = $this->pathNameIterator($filesIterator);
161-
$includedFiles = [];
160+
/** @var array<string,true> $includedFiles */
161+
$includedFiles = [];
162162

163163
foreach ($sourceFilePathNames as $sourceFile) {
164164
if (preg_match('(^phar:)i', $sourceFile) === 0) {
@@ -179,7 +179,7 @@ public function getAllClassNames(): array
179179

180180
require_once $sourceFile;
181181

182-
$includedFiles[] = $sourceFile;
182+
$includedFiles[$sourceFile] = true;
183183
}
184184

185185
$classes = [];
@@ -190,7 +190,7 @@ public function getAllClassNames(): array
190190

191191
$sourceFile = $rc->getFileName();
192192

193-
if (! in_array($sourceFile, $includedFiles, true) || $this->isTransient($className)) {
193+
if (! isset($includedFiles[$sourceFile]) || $this->isTransient($className)) {
194194
continue;
195195
}
196196

0 commit comments

Comments
 (0)