Zkuste omezit metadata, která se generují společně s DI kontejnerem
- David Grudl
- Nette Core | 8227
Do masteru nette/di jsem přidal možnost omezit metadata, která se generují jako součást DI kontejneru. Dají se zmenšit až na zlomek původní velikosti. Jak na to?
Jednoduše v konfiguraci řekněte, které z nich potřebujete jen během kompilace, ale už ne při běhu aplikace.
di:
export:
parameters: no
Přistane vkládat do konstruktoru DI kontejneru parametry. Protože přistupovat k těmto parametrům není obecně dobrý nápad, není to čistý postup, tak by mělo být obecně v pohodě je vypnout.
di:
export:
tags: no
Vypne export všech tagů, se kterými se pracuje metodou
$container->findByTag()
. Vypnout export všech se nemusí
úplně hodit, tak můžeme místo toho vyjmenovat, které z nich
přenášet:
di:
export:
tags:
- cached
- listener
Bude exportovat jen tagy cached
a listener
.
Každý CompilerExtension is může vynutit exportování nějakého tagu
tím, že zavolá
$this->compiler->addExportedTag('jmenotagu')
.
A nakonec metadata, která tvoří asi největší objem dat. Informace pro autowiring a vyhledávání podle tříd:
di:
export:
types:
- Nette\Database\Container
Uveďte zde třídy, se kterými voláte
$container->getByType()
(třída
Nette\Application\Application
je v seznamu automaticky). Informace
o ostatních třídách se přestanou přenášet.
Opět platí, že pokud nějaká extension sama v runtime nějaký typ
potřebuje (např. v metodě initialize()
volá
getByType()
), může export vynutit přes
$this->compiler->addExportedType(...)
.
- David Grudl
- Nette Core | 8227
To platí v případě, že se presentery vytvářejí za běhu a ne při
kompilaci. Lepší je nastavit application > scanDirs
tak, aby
je našlo a automaticky přidávalo do kontejneru.
- David Grudl
- Nette Core | 8227
Super :)
Btw jaký je důvod místo automatiky, co hledá presentery na pozadí, používat něco, u čeho je potřeba manuálně aktualizovat data?
- Martk
- Člen | 661
Moje neznalost composeru. Když jsem viděl, že je tam scanComposer (teď si myslím, že je pro mě úplně zbytečný a budu ho vypínat) a používat autoloading jen od composeru, tak jsem si říkal na co potřebuji scanDirs a robotLoader. Udělal jsem to před 2–3 lety a do teď jsem na to nesáhl.
Co se stane, když budu mít presenter v nějakém balíčku? Taky by se to nemělo automaticky načíst, když nebudu mít zapnutý přepínač -o (nebo nastavený v composer.json).
Takže postačí zaregistrovat v extension presentery jako služby a nette si je najde (přes findByType)?