Načítání presenteru trvá dlouho

malinamar
Člen | 12
+
0
-

Zdravím,

Mám problém v nette aplikaci, kdy se mi načítá dlouho homepage. Jde tam o jeden presenter, který je sice mimo app složku, ale v configu mám nastavené prohledávání i té složky mimo.

Použil jsem Debugger::timer na meření času a dostal jsem se až do PresenterFactory.php, ke getPresenterClass(&$name) a tam k !class_exists($class). Na tohle se spotřebovává veškerý čas – asi 1.3s. U ostatních presenterů to trvá pouze zlomek (nějaké desetitisíciny sekundy).

Kontroloval jsem namespace, název souboru, název třídy, aby bylo správně (case sensitive). Zkoušel jsem téhle funkci podstrčit i rodičovskou třídu od daného presenteru a v pohodě. I jiný presenter ve stejné složce.

Otázka tedy zní, co může být špatně, že jediný presenter se načítá tak dlouho?

Nesetkal jste se s tím někdo? Netušíte čím by to mohlo být?

Děkuji.

Kamil Valenta
Člen | 562
+
0
-

A ta rodičovská třída je také mimo adresář app/? Nebo to dělají jen ty presentery, které jsou mimo app/?

Marek Bartoš
Nette Blogger | 715
+
0
-

Objevuje se ti v /temp soubor který má v názvu ApplicationExtension?
Jestli ano, tak se ti opakovaně spouští přebuildování DIC.
V tom případě si buď manuálně zaregistruj presenter do služeb nebo nastav scanDirs. scanComposer prohledává jen classmap, třídy používající standardní PSR-4 autoloader nenajde.

Je však zvláštní že ti to nenajde jen jeden presenter ve složce, končí název souboru na Presenter.php jako u ostatních?

Editoval Marek Bartoš (8. 6. 9:07)

malinamar
Člen | 12
+
0
-

Kamil Valenta napsal(a):

A ta rodičovská třída je také mimo adresář app/? Nebo to dělají jen ty presentery, které jsou mimo app/?

Rodičovská třída je v app. Co jsem našel, tak to dělá jen jeden jediný presenter.

Marek Bartoš napsal(a):

Objevuje se ti v /temp soubor který má v názvu ApplicationExtension?
Jestli ano, tak se ti opakovaně spouští přebuildování DIC.
V tom případě si buď manuálně zaregistruj presenter do služeb nebo nastav scanDirs. scanComposer prohledává jen classmap, třídy používající standardní PSR-4 autoloader nenajde.

Je však zvláštní že ti to nenajde jen jeden presenter ve složce, končí název souboru na Presenter.php jako u ostatních?

Ne, v temp nic takového není.
Jinak já neříkám, že ho nenajde. Najde, ale trvá to strašně dlouho.

Editoval malinamar (8. 6. 9:35)

Marek Bartoš
Nette Blogger | 715
+
0
-

A jaké nastavení tedy máš v neonu u application? Jak má nastavený autoloading balík, ze kterého presenter načítáš? Registruješ některé presentery do služeb nebo se spoléháš na automatickou registraci?

malinamar
Člen | 12
+
0
-

Marek Bartoš napsal(a):

A jaké nastavení tedy máš v neonu u application? Jak má nastavený autoloading balík, ze kterého presenter načítáš? Registruješ některé presentery do služeb nebo se spoléháš na automatickou registraci?

Mám toto:
v jednom neone, který includuju do hlavního

application:
	debugger: TRUE
	#catchExceptions: TRUE
	errorPresenter: Error
	scanDirs:
	    - %appDir%/

a potom v hlavním

application:
    scanDirs:
        - %appDir%/../project/%projectName%/

Editoval malinamar (8. 6. 12:12)

NouF
Backer | 52
+
0
-

Používáš docker? Já mám to stejné, ale chyba byla v tom, že jak mám nalinkovanou složku do image, tak je to hrozně pomalé.

Čas loadingu je 3 – 10s na request

emololftw
Člen | 56
+
0
-

NouF napsal(a):

Používáš docker? Já mám to stejné, ale chyba byla v tom, že jak mám nalinkovanou složku do image, tak je to hrozně pomalé.

Čas loadingu je 3 – 10s na request

na pracovním PC mam docker a i doma na desktopu. Doma mám request 300ms a v práci jak jsi zmiňoval 3–10s. Hardwarově je to 8GB vs 40GB.

NouF
Backer | 52
+
0
-

Jaký PC má disk?

Osobní kde to je pomalé, tak mám webovky i docker na normálním disku.

Pracovní: tam je jen ssd a request je 250ms

Editoval NouF (8. 6. 13:51)

Marek Bartoš
Nette Blogger | 715
+
0
-

Podívej se do vygenerovaného DI kontejneru, zda tam presenter je. Jestli ne, tak nejrychlejší fix je zaregistrovat ho do služeb.
Jestli je zaregistrovaný, tak ideálně zjistit, jaký call přesně trvá tak dlouho. Nejjistěji ti to řekne Blackfire, případně dumpuj jednotlivé funkce.

Marek Bartoš
Nette Blogger | 715
+
+1
-

Docker pomalý není, jen je třeba mít soubory v Linuxovém adresáři, nesahat na ně přes síť. Na Windows je nejjednodušší WSL 2.0 se soubory v Linuxovém adresáři, na Macu se dají soubory mezi filesystémy synchronizovat, případně nově mají nějakou experimentální option co tohle řeší.

malinamar
Člen | 12
+
0
-

Trochu nevím, jak s tímto souvisí docker. To by nebyl problém pouze s jedním presenterem, ale se všemi ne?

Hardware problém taky nebude, to by znamenalo stejný problém pro všechny presentery zase.

Marek Bartoš
Nette Blogger | 715
+
0
-

Nesouvisí. Mrkni se na ten vygenerovaný kontejner – https://forum.nette.org/…-trva-dlouho#…

David Matějka
Moderator | 6439
+
0
-

Kontroloval jsem namespace, název souboru, název třídy, aby bylo správně (case sensitive).

A nedělal si právě to, že si upravil název toho souboru, třeba z malého „presenter“ na „Presenter“? To by právě k kombinaci s dockerem na třeba Macu mohlo způsobit problémy se syncem souboru.