Kompaktní verze & memory_limit=32M

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

Narazil jsem na podivný problém – pokud je nastaven memory limit v PHP.ini na nějakou nižší hodnotu (zdá se že s aktuální kompaktní verzí Nette stačí 32M) končí jakýkoliv pokus RobotLoaderu hláškou ve stylu PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 5 bytes) in /cesta/k/souboru/libs/Nette/loader.php on line 3099.

Problém má „jednoduché“ řešení, na které mi trvalo přijít trapně dlouho – rozdělit soubor loader.php na dva menší, kde v loader.php zůstane vše potřebné pro start aplikace.

Čemu se mi ale pořád nechce věřit je, že si Nette při indexování vezme v klidu těch 32M paměti. Nezkoumal jsem, jak je napsaný RobotLoader, ale možná by do budoucna prospělo, kdyby se kompaktní verze distribuovala jako více menších souborů shrnujících nějaké logické celky.

Editoval xificurk (23. 9. 2008 0:45)

romansklenar
Člen | 655
+
0
-

Zvláštní, dneska jsem se s tím taky setkal ale v trošku jiné situaci – ve standardní verzi (ne compact) ale web server (ala wamp) nainstalovaný na flashce,
úplně stejná chyba PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 5 bytes), pomohlo zvětšit memory limit a execution time. Spíš bych ale řek, že to bylo zapříčiněno rychlostí té flashky. Btw: vím, mít server na flashce je prasárna, je to jen nouzovka

David Grudl
Nette Core | 8111
+
0
-

Problém je v tom, že funkce token_get_all vytvoří skutečně strukturu o tak obrovské velikosti. Možným řešením by bylo přepsat analýzu do nějakých regulárních výrazů, což sice nebude 100% spolehlivé, ale tak na 99 % by to snad fungovat mohlo.

David Grudl
Nette Core | 8111
+
0
-

Nakonec jsem to vyřešil jinak – do kompaktních souborů jsem přidal hlavičku obsahující seznam tříd. Aktuální distribuce Texy, Nette a dibi ji už obsahují.