Skip to content

Commit 092989f

Browse files
committed
perf: use Composer autoloader first
- When we use Composer, we use Composer autoloader first. So no need to load Composer classmap to CI4 autoloader. - Add `App` and `Config` namespaces to composer.json. So we can use composer dump-autoload for app classes.
1 parent 2431b5b commit 092989f

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

composer.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
},
5959
"autoload": {
6060
"psr-4": {
61+
"App\\": "app/",
62+
"Config\\": "app/Config/",
6163
"CodeIgniter\\": "system/"
6264
},
6365
"exclude-from-classmap": [

system/Autoloader/Autoloader.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,6 @@ private function loadComposerInfo(Modules $modules): void
137137
*/
138138
$composer = include COMPOSER_PATH;
139139

140-
$this->loadComposerClassmap($composer);
141-
142140
// Should we load through Composer's namespaces, also?
143141
if ($modules->discoverInComposer) {
144142
// @phpstan-ignore-next-line
@@ -155,11 +153,11 @@ private function loadComposerInfo(Modules $modules): void
155153
*/
156154
public function register()
157155
{
158-
// Prepend the PSR4 autoloader for maximum performance.
159-
spl_autoload_register([$this, 'loadClass'], true, true);
156+
// Register classmap loader for the files in our class map.
157+
spl_autoload_register([$this, 'loadClassmap'], true);
160158

161-
// Now prepend another loader for the files in our class map.
162-
spl_autoload_register([$this, 'loadClassmap'], true, true);
159+
// Register the PSR-4 autoloader.
160+
spl_autoload_register([$this, 'loadClass'], true);
163161

164162
// Load our non-class files
165163
foreach ($this->files as $file) {
@@ -362,9 +360,13 @@ private function loadComposerNamespaces(ClassLoader $composer, array $composerPa
362360
{
363361
$namespacePaths = $composer->getPrefixesPsr4();
364362

365-
// Get rid of CodeIgniter so we don't have duplicates
366-
if (isset($namespacePaths['CodeIgniter\\'])) {
367-
unset($namespacePaths['CodeIgniter\\']);
363+
// Get rid of duplicated namespaces.
364+
$duplicatedNamespaces = ['CodeIgniter', APP_NAMESPACE, 'Config'];
365+
366+
foreach ($duplicatedNamespaces as $ns) {
367+
if (isset($namespacePaths[$ns . '\\'])) {
368+
unset($namespacePaths[$ns . '\\']);
369+
}
368370
}
369371

370372
if (! method_exists(InstalledVersions::class, 'getAllRawData')) {

0 commit comments

Comments
 (0)