Composer autoloader – je nějeké lepší řešení?
- tomaskrejci
- Člen | 25
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
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
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
@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
@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
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
@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"]
}
}
- tomaskrejci
- Člen | 25
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…
- David Grudl
- Nette Core | 8228
Odpovidal jsem na otazku, jaky rychlostni vliv bude mit eliminace RobotLoaderu. Zadny.