Nette 0.9.2-dev a memory limit
- deric
- Člen | 93
Na serveru mám php 5.2.6–1+lenny3 s memory limitem 32M. Při spuštění
mi to hlásí
Allowed memory size of 33554432 bytes exhausted (tried to allocate 14939363 bytes)
.
Používám minified verzi a chybu mi to hlásí na
scanScript($file){if(!defined('T_NAMESPACE')){define('T_NAMESPACE',-1);
je možné nějak snížit paměťové nároky při scanování souborů?
- kravčo
- Člen | 721
Pamäťové nároky znížiť nejdú – pamäť vyžiera PHP Tokenizer
(rozšírenie), ktorého funkciu token_get_all()
používa
RobotLoader
pri autoloadingu. Vyčerpanie pamäte spôsobujú
veľké súbory – na ich analýzu je potrebná veľká pamäť. Riešiť sa
to dá viacerými spôsobmi…
- Veľké súbory rozdelíme na menšie logické celky (ak je to možné).
- Najprv RobotLoaderu zakážeme tieto súbory skenovať – vytvoríme súbor netterobots.txt podľa vzoru z distribúcie dibi, či Texy. Následne pre ne vymyslíme iný systém načítania (napr. načítame ich zakaždým, alebo im napíšeme vlastný autoloader).
- Panda
- Člen | 569
kravčo napsal(a):
Pamäťové nároky znížiť nejdú – pamäť vyžiera PHP Tokenizer (rozšírenie), ktorého funkciu
token_get_all()
používaRobotLoader
pri autoloadingu. Vyčerpanie pamäte spôsobujú veľké súbory – na ich analýzu je potrebná veľká pamäť. Riešiť sa to dá viacerými spôsobmi…
- Veľké súbory rozdelíme na menšie logické celky (ak je to možné).
- Najprv RobotLoaderu zakážeme tieto súbory skenovať – vytvoríme súbor netterobots.txt podľa vzoru z distribúcie dibi, či Texy. Následne pre ne vymyslíme iný systém načítania (napr. načítame ich zakaždým, alebo im napíšeme vlastný autoloader).
3. Na začátek velkého souboru umístíme řádek, který bude obsahovat seznam všech tříd, které se v souboru nacházejí:
<?php //netteloader=class1,class2,class3
- kravčo
- Člen | 721
Minified verziu Nette či dibi „prednačítaš“ zrejme sám:
require LIBS_DIR . '/Nette/loader.php';
require LIBS_DIR . '/dibi/dibi.php';
Po týchto dvoch riadkoch (za predpokladu, že sú tam minified verzie) je celé Nette i dibi načítané. Pri veľkom množstve malých súborov nemá prečo Tokenizer vyčerpať pamäť, pracuje totiž vždy len s jedným…
Možno by pomohlo zistenie, na ktorom súbore to zhavaruje…
- deric
- Člen | 93
Ze Zendu používám jenom Zend_Mail a složku Zendu jsem RobotLoaderu zakázal procházet. Havaruje to paradoxně na načítání malé třídy (cca 60 řádků).
Uncaught exception 'LogicException' with message
'Class location could not be loaded'
in /home/euser/app/rev87/system/libs/Nette/loader.php:4133
Stack trace:
#0 [internal function]: spl_autoload('location')
#1 /home/euser/app/rev87/system/libs/Nette/loader.php(4133):
spl_autoload_call('location')
#2 /home/euser/app/rev87/system/libs/Nette/loader.php(4150):
RobotLoader->addClass('Location', '/home/euser/...')
#3 /home/euser/app/rev87/system/libs/Nette/loader.php(4137):
RobotLoader->scanScript('/home/euser/...')
nevypadá to na chybu Nette…
bude to nejspíš souviset s tímto bugem: http://bugs.typo3.org/view.php?…