Skip to content

Commit 518bad4

Browse files
committed
Optimize: use O(1) item lookup instead of O(M) in a loop.
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 8cfc270 commit 518bad4

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;
@@ -165,7 +164,8 @@ public function getAllClassNames(): array
165164
$this->sourceFilePathNames ?? [],
166165
$this->pathNameIterator($filesIterator),
167166
);
168-
$includedFiles = [];
167+
/** @var array<string,true> $includedFiles */
168+
$includedFiles = [];
169169

170170
foreach ($sourceFilePathNames as $sourceFile) {
171171
if (preg_match('(^phar:)i', $sourceFile) === 0) {
@@ -186,7 +186,7 @@ public function getAllClassNames(): array
186186

187187
require_once $sourceFile;
188188

189-
$includedFiles[] = $sourceFile;
189+
$includedFiles[$sourceFile] = true;
190190
}
191191

192192
$classes = [];
@@ -197,7 +197,7 @@ public function getAllClassNames(): array
197197

198198
$sourceFile = $rc->getFileName();
199199

200-
if (! in_array($sourceFile, $includedFiles, true) || $this->isTransient($className)) {
200+
if (! isset($includedFiles[$sourceFile]) || $this->isTransient($className)) {
201201
continue;
202202
}
203203

0 commit comments

Comments
 (0)