Načítání presenteru trvá dlouho
- malinamar
- Člen | 12
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 | 822
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 | 1280
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. 2022 9:07)
- malinamar
- Člen | 12
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. 2022 9:35)
- Marek Bartoš
- Nette Blogger | 1280
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
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. 2022 12:12)
- emololftw
- Člen | 82
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.
- Marek Bartoš
- Nette Blogger | 1280
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 | 1280
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ší.
- Marek Bartoš
- Nette Blogger | 1280
Nesouvisí. Mrkni se na ten vygenerovaný kontejner – https://forum.nette.org/…-trva-dlouho#…
- David Matějka
- Moderator | 6445
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.