2009-04-24 6 views
1

J'ai un script qui tourne lentement et je me demandais comment je pouvais le chronométrer et voir quelles corrections amélioraient la vitesse. Y a-t-il une sorte de minuteur PHP?Comment tester la vitesse de mon script PHP?

Mise à jour: Je pensais que je devrais clarifier ... Le script qui tourne lentement est mon script de liste de diffusion qui envoie un courriel à tous les membres de la liste. Je suis donc en train de boucler une liste d'abonnés et de leur envoyer un courriel un par un. C'est tellement lent que j'ai pensé qu'il serait intéressant de voir combien de temps il a fallu pour parcourir le tableau. Donc, je cherche un moyen rapide et facile de tester cela.

Répondre

0

j'ai fini à l'aide d'une classe Timer j'ai trouvé semblable à celui-ci: http://forum.codecall.net/php-tutorials/4254-php-timer-class.html

Je viens de commencer une minuterie au début de ma boucle et connecté la durée à la fin de chaque itération. Trouvé, en moyenne, cela prenait entre 3 et 4 secondes par email! Cinq minutes par explosion d'email est un peu trop. Il est temps de refactoriser ...

1

Vous pouvez mesurer le temps de chargement de votre page et l'ajuster si nécessaire. J'aime les sites Web comme http://www.phpbench.com/ qui vous en disent plus sur les besoins de base en php.

Le fait d'écrire du code en utilisant Zend Framework ne dit rien sur votre code. Suivez-vous les normes de codage Zend?

http://www.php.net/getrusage peut être utile pour votre problème de synchronisation.

Bonne chance!

edit: lien supplémentaire pour la fonction getrusage (renvoyé aussi sur la page php.net).

éditer 2: Pour votre liste de diffusion, vous pouvez vérifier phpbench.com par exemple avec le compte avant la boucle qui fait gagner du temps.

Comment envoyez-vous vos mails? Cela pourrait être un goulot d'étranglement.

Bonne chance!

+0

J'ai seulement mentionné Zend Framework dans le cas où il y avait quelque chose de construit que je ne connaissais pas – Andrew

1

La meilleure chose que je connais et que j'utilise tout le temps est d'utiliser un profileur. Mon profileur de choix est Xdebug qui a un profileur intégré, et l'installer dans votre configuration PHP est assez facile. Une fois opérationnel, il peut vous donner toutes sortes d'informations de débogage et de profilage, et le format de sortie de Xdebug peut être lu par l'étonnant kCacheGrind tool (visualisant et rapportant sur la pile et représentant graphiquement le flux de votre application) si vous êtes un Heureux campeur Linux. Que ferais-je sans ces outils? En outre, il y a quelques pièges en termes de vitesse quand il s'agit de Zend Framework, principalement associés à ne pas utiliser suffisamment la classe Zend_Cache, ou des hiérarchies de classes compliquées où vous devriez utiliser la classe Zend_Registry.

Heureux profilage.

+0

C'est un peu bizarre d'impliquer que pour que ZF soit rapide, il faudrait utiliser Zend_Cache. Et Zend_Registry n'est pas une solution à l'architecture compliquée, au contraire. –

+0

C'est bizarre que lorsque les gens utilisent le Zend Framework, ils le ralentissent parce qu'ils n'utilisent pas une partie importante pour le rendre plus rapide? :) Aussi, "convoluté": 1. \t tordu; enroulé. 2. \t compliqué; Par conséquent, lorsque votre programme est compliqué, vous pouvez démêler les complexités en les déplaçant dans Zend_Registry. C'est son but. – AlexanderJohannesen

0

Pourquoi ne pas utiliser une file d'attente? Cela me semble une bonne idée, car à mesure que la liste grandit, vous atteignez les limites du serveur de messagerie. Il y a une popular implementation in PEAR de cette file d'attente, mais tout ce dont vous avez besoin est essentiellement un travail cron et une table de base de données.

Je suis en train de construire quelque chose de similaire en ZF donc je suis intéressé de voir ce qui se passe!

Questions connexes