Composer autoloader – je nějeké lepší řešení?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomaskrejci
Člen | 25
+
0
-

Ahoj vsem,

kdyz jsem si trochu analyzoval co se deje v aplikaci, zjistil jsem, ze composer Composer\Autoload\ClassLoader pokazde dela zhruba 500krat file_exists. Generovani classMap pomoci composer dump-autoload mi neprijde moc sikovne a stejne to do mapy nevlozi vsechny soubory, ktere se behem skriptu realne nacitaji (louska to nejak z composer.json myslim…).

Neni mozne to nejak vylepsit? :) neresil jste to uz nekdo? Ze by se napr. v production modu ta mapa generovala a doplnovala pokazde, co se sahne pro nejaky nenamapovany soubor napr.

Otazka 2, uz jsem se nekolikrat setkal s tim, ze lidi odstranuji Nettacky robotloader a nahrazuji ho za composer classloader – je v necem lepsi?

Diky moc.

David Matějka
Moderator | 6445
+
0
-

a stejne to do mapy nevlozi vsechny soubory

musis spoustet composer dump-autoload -o, ktery vygeneruje optimalizovanou class mapu a pak se nebude koukat na existenci souboru.

uz jsem se nekolikrat setkal s tim, ze lidi odstranuji Nettacky robotloader a nahrazuji ho za composer classloader – je v necem lepsi?

lepsi ani ne, nette robot loader je pro vyvoj pohodlnejsi. Ja ten netti pouzivam jen pro vyvoj a na produkci mam jen composer autoloader – aby to nemuselo hledat skrz dva autoloadery.

tomaskrejci
Člen | 25
+
0
-

Ad robotloader: Aha, takze kdyz se zeptam blbe, soubor se hleda v jednom autoloaderu a kdyz se tam nenajde, hleda ho ten druhy?

Ad composer: to jsem udelal, presto je tam s bidou polovina souboru, ktere se nacitaji a file_exists je pouzity 500×. Navic to vyzaduje rucni generovani tohoto souboru.

Jan Tvrdík
Nette guru | 2595
+
0
-

@tomaskrejci Jestli tam nějaké soubory chybí, tak má buď tvůj projekt nebo některá z knihoven špatně definovaný autoloading. Jinak, co se výkonu týče, tak je potřeba ještě zapnout https://getcomposer.org/…06-config.md#…

tomaskrejci
Člen | 25
+
0
-

@DavidMatějka mohl bys mi prosimte poradit, jak nahradim robotloader composer loaderem? Idealne kus kodu by helfl :) Diky

Editoval tomaskrejci (11. 7. 2016 19:50)

mrtnzlml
Člen | 140
+
+5
-

Zase si tu trošku ohřívám polívčičku, ale když už jsem ten článek napsal, tak tady je: PSR-4 autoloader aplikace :)

Jan Tvrdík
Nette guru | 2595
+
+1
-

@tomaskrejci Je potřeba přidat do composer.json definici autoloadingu, tj. pokud teď máš v aplikaci něco jako

$configurator->createRobotLoader()
	->addDirectory(__DIR__)
	->register();

tak místo toho přidáš do composer.json

{
	"autoload": {
		"classmap": ["app"]
	}
}
mkoubik
Člen | 728
+
0
-

…a do bootstrapu require_once __DIR__ . '/../vendor/autoload.php';.

Blujacker
Člen | 89
+
0
-

Jake je zhruba zrychleni v pouzitim composer dump-loaderu? Chystam se to vyzkouset ale abych vedel jestli mam ocekavat neco vyrazneho nebo spis ne.

Diky

Jan Tvrdík
Nette guru | 2595
+
0
-

@Blujacker Zrychlení vůči čemu?

Blujacker
Člen | 89
+
0
-

Pouziti jenom jednoho autoloaderu (composer) namisto dvou (composer, robotloader).

David Grudl
Nette Core | 8228
+
+2
-

K žádnému zrychlení nedojde, nepostřehneš nic.

tomaskrejci
Člen | 25
+
0
-

To bude zalezet na konkretni aplikaci… u me, jak jsem psal, to bylo 500× file_exists vuci nyni asi 3 za celou aplikaci… (diky klukum vyse za rady pri implementaci). Na localhostu zrychleni asi 20% (cca 70ms) ale to je nic nerikajici…

Šaman
Člen | 2665
+
0
-

Ani jeden loader by v produkčním režimu neměl dělat file_exists. Nemáš to nějaký buglý, že ti tam nějaká třída chyběla a ono se jí to snažilo dohledávat, či co?

David Grudl
Nette Core | 8228
+
0
-

Odpovidal jsem na otazku, jaky rychlostni vliv bude mit eliminace RobotLoaderu. Zadny.