Velké množství services registrovaných přes config.neon
- MartyIX
- Člen | 217
Ahoj,
jen tak ze zajímavosti bych se chtěl zeptat, jestli někdo narazil na nějaké omezení co se týče velkého počtu services v config.neon. Teoreticky pro velké weby (csfd.cz, damejidlo.cz?) by část konfigu (vypadají zhruba následovně):
services:
- App\RouterFactory
- App\Model\CurrencyModel
- App\Model\UserModel
- App\Model\PlanModel
- App\Model\SettingModel
- ...
mohla vyrůst na něco jako stovky řádků. Máte s tím nějaké negativní zkušenosti? (Přešli jste na jiné řešení?)
Díky!
- jiri.pudil
- Nette Blogger | 1030
Z vlastní zkušenosti s několika stovkami služeb: výkonnostně to problém rozhodně není, Nette si to zpracuje stejně jenom jednou a potom zakešuje celý vygenerovaný kontejner. A co se týče přehlednosti, dost pomáhá si konfiguraci rozsekat do několika menších souborů a ty includovat.
- Jan Tvrdík
- Nette guru | 2595
Můžeš si napsat CompilerExtension
a nechat si některé
služby registrovat automaticky. Nette to od verze 2.3 dělá pro všechny
presentery.
- David Grudl
- Nette Core | 8227
@JanEndel Jak velký to generuje kontejner?
btw generování je teď rychlejší
- Filip Procházka
- Moderator | 4668
Rohlík.cz má container v produkčním módu 711 KiB, 18861 řádků,
obsahuje pouhých 740 výskytů „function createService“ a
98 generovaných továrniček. Neon soubory mají dohromady 63,6KiB (pouze ty
v aplikaci, neměřil ty další ve vendor
).
- Patrik Votoček
- Člen | 2221
Slevomat – 536KiB, 19985 řádků (do konce
týdne to určitě bude víc jak 20k), 870 výskytů
function createService
, 116 generovaných továrniček, NEON
soubory mají 228KiB (7437 řádků).
- Zax
- Člen | 370
Fíha, pěkná čísla.. já cca před měsícem začal makat na jednom eshopu a jsem jen na pouhých 5049 řádcích (164 kB), generovaných továren mám něco málo přes 50 (část v neonech, část v extensions) :-D
EDIT: jo a něco mi říká, že registrování služeb a továren v neonu je možná lepší :-D
Editoval Zax (10. 3. 2015 18:42)
- Filip Procházka
- Moderator | 4668
@PatrikVotoček fascinuje mě, že máte o tolik větší configy :) To nepoužíváte autowiring?
- David Grudl
- Nette Core | 8227
Zkoušeli jste už, jaký je rychlostní rozdíl v kompilaci pod 2.2 a 2.3?
- David Matějka
- Moderator | 6445
@DavidGrudl znatelny, o 30–50% lepsi. Jen to pak zpomaluje registrovani presenteru do kontejneru. Proto to mam pri vyvoji vypnuty.
- Patrik Votoček
- Člen | 2221
@FilipProcházka máme doopravdy hodně rozsáhlou sekci
parameters
@DavidGrudl u nás je rozdíl asi 8%
- David Matějka
- Moderator | 6445
@PatrikVotoček oproti 2.2 zlepseni jen 8%? to je hodne malo.. zkousel si vypnout tu auto registraci presenteru?
- David Grudl
- Nette Core | 8227
Regenerace kontejneru, jen když je to fakt nutné https://github.com/…e/di/pull/65.
- Ondřej Mirtes
- Člen | 1536
@FilipProcházka A taky ve Slevomatu používáme u všech služeb zápis:
-
class: Google_Client
Jednak pak nemusíme celý řádek přeformátovávat, jakmile potřebujeme
doplnit arguments
(méně práce a hezčí diff) a druhak se to
líp čte, protože všechny třídy jsou zarovnané pod sebe a není to
„cik-cak“.
- Ondřej Mirtes
- Člen | 1536
Pro věci, co nejdou autowirovat? Typicky věci z parameters nebo typy, od kterých existuje víc služeb.
- Filip Procházka
- Moderator | 4668
A není hezčí tohle? :)
services:
- Google_Client(@nejaka_sluzba_co_nejde_autowirovat, %parametr%)
- Ondřej Mirtes
- Člen | 1536
Tohle se spoléhá na pořadí parametrů, takže se to dá snadno rozbít.
My používáme pojmenované, takže autowirované můžeme vynechat a nemusíme
takhle do toho závorkového konstruktoru uvádět ...
.
# konstruktor servisy obsahuje další autowirované parametry a je nám jedno, na jakých pozicích jsou
-
class: Slevomat\GoogleAnalyticsImport\GoogleAnalyticsUploadService
arguments:
googleAnalyticsAccountId: %google.analytics.accountId%
googleAnalyticsWebPropertyId: %google.analytics.webPropertyId%
googleAnalyticsDataSourceId: %google.analytics.dataSourceId%
schema: %google.analytics.import.schema%
- Šaman
- Člen | 2661
Ondřej Mirtes napsal(a):
Tohle se spoléhá na pořadí parametrů, takže se to dá snadno rozbít. My používáme pojmenované, takže autowirované můžeme vynechat a nemusíme takhle do toho závorkového konstruktoru uvádět
...
.# konstruktor servisy obsahuje další autowirované parametry a je nám jedno, na jakých pozicích jsou - class: Slevomat\GoogleAnalyticsImport\GoogleAnalyticsUploadService arguments: googleAnalyticsAccountId: %google.analytics.accountId% googleAnalyticsWebPropertyId: %google.analytics.webPropertyId% googleAnalyticsDataSourceId: %google.analytics.dataSourceId% schema: %google.analytics.import.schema%
Pojmenované parametry? Něco mi uteklo, nebo mám teď jen memory leak?
- David Grudl
- Nette Core | 8227
Btw tohle by mělo jít taky
services:
- Slevomat\GoogleAnalyticsImport\GoogleAnalyticsUploadService(
googleAnalyticsAccountId: %google.analytics.accountId%
googleAnalyticsWebPropertyId: %google.analytics.webPropertyId%
googleAnalyticsDataSourceId: %google.analytics.dataSourceId%
schema: %google.analytics.import.schema%
)