1 votes

Doctrine lazy loading classes takes 100 ms ?

Je suis paresseux en chargeant mes classes Doctrine dans mon site web. L'analyse comparative a montré que Doctrine::loadModels('models') prend plus de 100 ms pour se terminer ! J'ai 118 tables au total, mais quand même...

attribut de réglage pour un chargement conservateur :

Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);

l'exécution de la partie benchmark :

$CI->benchmark->mark('Doctrineload_start');
Doctrine::loadModels(APPPATH.'models');
$CI->benchmark->mark('Doctrineload_end');

Et le résultat :

Doctrineload    0.1085 (seconds)

Est-ce "normal" ?

"contexte" :

Loading Time Base Classes   0.0233
Doctrineinit    0.0435  //doctrine_pi.php file, doctrine configuration + db account
Doctrineload    0.1085
Masterpageset   0.0001
Userload    0.1208 //1 db query
Masterpageaddcontent    0.1565 //1 db query, loading view with some <?=?> php parsing
Masterpageshow      0.0203 //loading view
Controller Execution Time ( Home / Index )      0.3591
Total Execution Time    0.3826

5voto

awgy Points 3834

Utilisez-vous un système de mise en cache des opcodes comme APC ou xcache ? Si ce n'est pas le cas, vous devriez envisager d'en installer un. Vous verrez une amélioration spectaculaire lorsque vous utiliserez des frameworks et des bibliothèques plus importants comme Doctrine. PHP passe un temps non négligeable à chaque requête pour recompiler tous les fichiers nécessaires à la génération de la réponse. L'utilisation d'un cache d'opcode réduira considérablement cette charge.

APC est prévu pour être inclus dans PHP à terme, l'un de ses mainteneurs est Rasmus Lerdorf lui-même, et il semble être un système très populaire. Voir : http://pecl.php.net/package/APC

XCache a été écrit par le créateur de lighttpd et il semble être une option assez viable, bien que je ne l'ai pas utilisé depuis un moment. Voir : http://xcache.lighttpd.net/

0voto

webgr Points 321

Gardez à l'esprit que la compilation Doctrine vous donne simplement une version plus compacte des fichiers php originaux qui réduira le temps nécessaire à l'interprète PHP pour analyser le code source. Elle ne traduit pas en bytecode. Donc un cache bytecode va toujours ajouter beaucoup de valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X