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

před 3 lety

MartyIX
Člen | 219
+
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!

před 3 lety

jiri.pudil
Člen | 817
+
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.

před 3 lety

Jan Tvrdík
Nette guru | 2536
+
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.

před 3 lety

looky
Člen | 100
+
0
-

Doplním @JanTvrdík: ApplicationExtension

před 3 lety

Jan Endel
Člen | 976
+
+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.

před 3 lety

David Grudl
founder | 6706
+
0
-

@JanEndel Jak velký to generuje kontejner?

btw generování je teď rychlejší

před 3 lety

Jan Endel
Člen | 976
+
+2
-

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

před 3 lety

David Grudl
founder | 6706
+
+3
-

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

před 3 lety

Filip Procházka
Moderator | 4692
+
+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).

před 3 lety

Jan Endel
Člen | 976
+
+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)

před 3 lety

Patrik Votoček
Člen | 2249
+
+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ů).

před 3 lety

Zax
Člen | 371
+
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)

před 3 lety

Filip Procházka
Moderator | 4692
+
0
-

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

před 3 lety

David Grudl
founder | 6706
+
0
-

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

před 3 lety

David Matějka
Moderator | 5194
+
0
-

@DavidGrudl znatelny, o 30–50% lepsi. Jen to pak zpomaluje registrovani presenteru do kontejneru. Proto to mam pri vyvoji vypnuty.

před 3 lety

Patrik Votoček
Člen | 2249
+
0
-

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

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

před 3 lety

David Matějka
Moderator | 5194
+
0
-

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

před 3 lety

David Grudl
founder | 6706
+
+8
-

Dneska večer asi něco commitnu.

před 3 lety

Patrik Votoček
Člen | 2249
+
0
-

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

před 3 lety

David Grudl
founder | 6706
+
+2
-

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

před 3 lety

Ondřej Mirtes
Člen | 1539
+
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“.

před 3 lety

David Grudl
founder | 6706
+
0
-

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

před 3 lety

Ondřej Mirtes
Člen | 1539
+
0
-

Pro věci, co nejdou autowirovat? Typicky věci z parameters nebo typy, od kterých existuje víc služeb.

před 3 lety

Filip Procházka
Moderator | 4692
+
+1
-

A není hezčí tohle? :)

services:
    - Google_Client(@nejaka_sluzba_co_nejde_autowirovat, %parametr%)

před 3 lety

Ondřej Mirtes
Člen | 1539
+
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%

před 3 lety

Šaman
Člen | 2170
+
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?

před 3 lety

David Grudl
founder | 6706
+
+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%
   )