2010-04-09 4 views
1

Je suis paresseux de charger mes cours de Doctrine dans mon site Web. Benchmarking a montré que Doctrine::loadModels('models') prend plus de 100 ms à compléter! Je 118 tableaux au total, mais quand même ...Doctrine paresseux les classes de chargement prend 100 ms?

attribut de réglage de chargement conservateur:

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

courir la partie de référence:

$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 

Répondre

5

Utilisez-vous un système de mise en cache d'opcode comme APC ou xcache? Si non, vous devriez envisager d'en installer un. Vous verrez une amélioration spectaculaire lorsque vous utilisez des frameworks et des bibliothèques plus grands comme Doctrine. PHP passe un temps non-trivial à chaque requête recompilant tous les fichiers nécessaires pour générer la réponse. L'utilisation d'un cache d'opcode réduit considérablement cette surcharge. APC est prévu pour être inclus dans PHP finalement, un si ses mainteneurs est Rasmus Lerdorf lui-même, et il semble être un système très populaire. Voir:

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

+0

Non, nous n'en utilisons pas encore. Je sais que Doctrine a une fonction de compilation intégrée. Je vais essayer ça. Merci! – Ropstah

+0

En guise de suivi: Avez-vous déjà installé un système de mise en cache? Si oui, avez-vous connu une amélioration? –

0

Gardez à l'esprit que la compilation de Doctrine ne vous fournit qu'une version plus compacte des fichiers php d'origine qui réduira le temps nécessaire à l'interpréteur PHP pour analyser le code source. Cela ne se traduit pas par bytecode. Donc, un cache bytecode va encore ajouter beaucoup de valeur.

Questions connexes