Velké množství services registrovaných přes config.neon

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

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 | 1029
+
0
-

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
+
0
-

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.

looky
Člen | 99
+
0
-

Doplním @JanTvrdík: ApplicationExtension

Jan Endel
Člen | 1016
+
+1
-

Za damejidlo musím říct, že i s neony +500 řádků nette pracuje schopně a ochotně, viz to výše zmíněné cachování. Akorát se v takhle velkých neonech často řeší konflikty na úrovni gitu.

David Grudl
Nette Core | 8205
+
0
-

@JanEndel Jak velký to generuje kontejner?

btw generování je teď rychlejší

Jan Endel
Člen | 1016
+
+2
-

@DavidGrudl 532 kB datově, 14735 řádků.

David Grudl
Nette Core | 8205
+
+3
-

To je jak minifikovaná verze celého Nette 2.0 ;-)

Filip Procházka
Moderator | 4668
+
+4
-

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).

Jan Endel
Člen | 1016
+
+3
-

@FilipProcházka rohlík má delší penis než damejidlo :-(

// edit: jestli to nebude tím, že my už jsme od nás rohlík kompletně smazali, vy nás ne :-P

Editoval Jan Endel (4. 2. 2015 0:05)

Patrik Votoček
Člen | 2221
+
+4
-

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
+
0
-

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
+
0
-

@PatrikVotoček fascinuje mě, že máte o tolik větší configy :) To nepoužíváte autowiring?

David Grudl
Nette Core | 8205
+
0
-

Zkoušeli jste už, jaký je rychlostní rozdíl v kompilaci pod 2.2 a 2.3?

David Matějka
Moderator | 6445
+
0
-

@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
+
0
-

@FilipProcházka máme doopravdy hodně rozsáhlou sekci parameters

@DavidGrudl u nás je rozdíl asi 8%

David Matějka
Moderator | 6445
+
0
-

@PatrikVotoček oproti 2.2 zlepseni jen 8%? to je hodne malo.. zkousel si vypnout tu auto registraci presenteru?

David Grudl
Nette Core | 8205
+
+8
-

Dneska večer asi něco commitnu.

Patrik Votoček
Člen | 2221
+
0
-

@DavidMatějka: tu máme vypnutou :-)

David Grudl
Nette Core | 8205
+
+2
-

Regenerace kontejneru, jen když je to fakt nutné https://github.com/…e/di/pull/65.

Ondřej Mirtes
Člen | 1536
+
0
-

@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“.

David Grudl
Nette Core | 8205
+
0
-

Proč vůbec používáte arguments?

Ondřej Mirtes
Člen | 1536
+
0
-

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
+
+1
-

A není hezčí tohle? :)

services:
	- Google_Client(@nejaka_sluzba_co_nejde_autowirovat, %parametr%)
Ondřej Mirtes
Člen | 1536
+
0
-

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 | 2654
+
0
-

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 | 8205
+
+5
-

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%
   )