2008-11-09 8 views
6

L'optimisation du code PHP via le benchmark d'exécution est simple. Gardez une trace de $ start et $ end fois via microtime() autour d'un bloc de code - je ne cherche pas une réponse qui implique l'utilisation de microtime(). Ce que je voudrais faire, c'est mesurer le temps qu'il faut à PHP pour se préparer à exécuter son code-code-parse/op-code-tree-time. Mon raisonnement est que, bien qu'il soit facile d'inclure() chaque classe dont vous avez besoin pour chaque page que vous avez sur un site, le temps système ne peut pas être "libre". J'aimerais savoir à quel point l'analyse est coûteuse.Existe-t-il un moyen de mesurer le temps d'analyse en PHP?

Je suppose qu'un cache d'opcode tel que APC est et non partie du scénario. Est-ce que je serais correct que la mesure du temps d'analyse en PHP est quelque chose qui devrait avoir lieu dans mod_php?

EDIT: Si possible, en prenant en compte l'utilisation $_SERVER['DOCUMENT_ROOT'] dans le code serait utile. Les solutions de commande peuvent prendre un peu de bricolage pour le faire (mais restent des réponses précieuses).

Répondre

7

Oui. Il y a.

<?php return; rest of the code ?> 

ou

<?php whole code; $%^parse [email protected]! ?> 

puis comparer le temps d'exécuter le script vide

time php empty.php 

avec le temps qu'il faut pour exécuter (ou échec) écriture régulière avec les ajouts que je l'ai mentionné ci-dessus :

time php test.php 

J'ai utilisé cette méthode sur de gros fichiers et PHP5.3 sur Core2Duo 2.4Ghz peut analyser entre 1.5 et 4.5MB de code PHP par seconde (cela dépend beaucoup de la complexité du code).

1

Une méthode peut être de chronométrer l'exécution du script à partir de la ligne de commande.

Dans Linux par exemple:

$ time php5 -r 'echo "Hello world";' 
Hello world 
real 0m1.565s 
user 0m0.036s 
sys  0m0.024s 

Est-ce que l'aide du tout? Peut-être est-ce utile pour découvrir les temps relatifs entre différents scripts, mais cela peut ne pas être une indication du temps passé par le module Apache.

2

Pour le niveau d'analyse détaillé que vous cherchez, il semble que l'implémentation de Xdebug (http://xdebug.org/) vous donnerait la meilleure information sans avoir à découper votre code en segments.

+0

Avez-vous des exemples spécifiques sur la façon de faire cela? – jschrab

+0

Je trouve que Zend parle mieux que moi - http://devzone.zend.com/article/2803-Introducing-xdebug –

Questions connexes