Optimisation de scripts PHP, comment la calculer. - PHP - Programmation
Marsh Posté le 29-07-2005 à 21:19:37
Il y avait un bug dans la fonction que j'ai fait en corrigeant un chouillat le script avant de le poster, j'ai corrigé.
Marsh Posté le 29-07-2005 à 22:07:43
y'a aussi une classe benchmark sur PEAR (au passage PEAR, j'ai toujours pas compris le principe du truc...c'est juste plein de class ?!?)
Sinon, ce soir, je vais tester phpcoverage (qui utilise xdebug) http://www.spikesource.com/project [...] ements.php
et pour ta variable : transforme tes fonctions & tout en objet, et tu aura plus de problème de variable avec un nom merdique
Marsh Posté le 29-07-2005 à 22:34:15
Comme j'ai dit, y'a surement mieux et mieux optimisé.
L'avantage de vos trucs par rapport à XDebug (par exemple), c'est que demain, j'ai un nouvel ordi, j'installe XP, DreamWeaver, Wampserver et hop, je me retrouve dans mon environnement de développement et mes routines me permettent de gérer l'optimisation n'importe où sans rien rajouter d'autres (d'ailleurs je le fais souvent quand je vais bosser sur le portable de ma femme devant la télé).
Zapan666 => Développe ? C'est quoi un objet ?
Marsh Posté le 29-07-2005 à 22:57:09
The-Shadow a écrit : Comme j'ai dit, y'a surement mieux et mieux optimisé. |
mouais, bon, xdebug, je viens de l'installer, 5min top chrono avec mon 266Mhz...
Pour l'objet, j'ai dit une connerie, ça change rien du tout, tu aura toujours une variable qui traine, mais tu peux mettre tes fonctions dans un objet, tout de même
Code :
|
et ta page de test :
Code :
|
Bon, c'est fait à l'arrache. Je sais pas si ça marche...mais grosso modo, y'a l'idée. C'est pour PHP5 : pour PHP4, faut un peu adapter
Marsh Posté le 29-07-2005 à 23:56:00
Concrètement, je gagne quoi à utiliser ton truc plutot que le mien, à part des lignes en plus ?
Marsh Posté le 30-07-2005 à 01:45:27
Mon xDebug me génère des fichiers ouvrable sous KCacheGrind (nux) ou sur WinCacheGrind (win), ça donne ça :
En plus il fait débuggueur, par exemple en cas d'erreur, il m'affiche une jolie stacktrace
Marsh Posté le 30-07-2005 à 01:46:15
J'peut fouiller dans les méthodes, me balader partout pour contrôler le déroulement du script, vérifier ligne par ligne, etc
Marsh Posté le 30-07-2005 à 02:02:31
Ouai, concrètement, c'est un débuggueur.
Avec toute la complexité qu'impose un programme du genre.
Sans possibilité de tri là où TOI tu le veux.
ça à l'air pas mal, mais je préfère ma méthode
Elle est tellement plus simple.
En fait, j'en utilise d'autre, j'ai aussi une fonction qui me fait mes requêtes SQL et qui les calcule ainsi que le temps qu'elles prennent, etc.
A l'époque où je programmais en GFA, j'avais un debuggeur, c'est lourdingue, c'est comment donner 658 informations. Résultat, on passe plus de temps à chercher l'optimisation qu'à faire du concrès, c'est comme si je voulais mettre un sapin dans mon jardin et qu'on m'amène un sapin de noël, il faudrait que je me débrouille à virer les guirlandes et les boules en trop (sans parler de la crèche ) sans lui faire perdre les épines qui m'intéressent.
Bref, ta méthode est valable par rapport à la mienne, mais elles ne peuvent être comparée, la mienne est nettement plus concrète vu qu'elle ne fournit que ce que je veux. Et niveau pédagogie et simplicité, la mienne l'emporte facilement.
Cela dit, ta méthode a tout à fait sa place dans ce topic.
Marsh Posté le 30-07-2005 à 10:55:35
Shadow, ta fonction est en effet tout bête, mais je pense qu'elle permet une très bonne optimisation.
On voit vraiment où est ce que le CPU rame le plus et on peut optimiser localement.
Par rapport à toutes les possibilités d'un débuggeur, je trouve la methode très bonne.
Je l'utilise depuis un peu moins d'un an.
(pas exactement la même chose, mais un truc qui ressemble bien...)
++
Marsh Posté le 30-07-2005 à 11:21:12
The-Shadow a écrit : Sans possibilité de tri là où TOI tu le veux. |
Je pige pas ta phrase J'ai le temps d'exécution de toutes les méthodes, j'peux voyager facilement pour trouver la méthode qui m'intéresse, ou la ligne...
Ensuite moi je passe pas mon temps à mettre la fonction de calcul, c'est automatisé En fait au début j'avais un truc comme le tiens Mais ça devenait tellement lourdingue, que j'ai vite cherché autre chose, c'est là où je suis tombé sur xdebug
Marsh Posté le 30-07-2005 à 17:22:30
Ce que je veux dire par tri, c'est que tu as les temps de TOUT, alors qu'il y a des trucs en PHP, tu sais que le temps est ridicule et calctaf te donne que l'instant X que tu voulais.
J'ai une macro dans Dream, je tape mon commentaire, je clic sur un bouton et il me rajoute calctaf('mon texte');
J'avoue faut juste que je vérifie les apostrophes parce que j'ai eu la flemme de modifier la macro à la main.
Pour ce qui est du lourdingue, bah, c'est comme commenter son code, de toute façon, c'est lourdingue de mettre des commentaires partout, mais même si je n'avais pas calctaf, je le ferais pour m'y retrouver plus tard.
Marsh Posté le 31-07-2005 à 17:53:54
Apparament le 2 vu que WinCacheGrind marche que avec celui-ci
Marsh Posté le 31-07-2005 à 23:30:18
je n'arrive pas a creer les fichier .out
j'ai mis dans le php .ini :
xdebug.profiler_enable 1
xdebug.profiler_output_dir F:\repertoire
merci
Marsh Posté le 01-08-2005 à 04:25:02
Citation : xdebug.profiler_enable=1 |
me semble plus approprié
moi, le pb que j'ai : dès fois, il fait les .out, dès fois, il ne fait rien, et je comprend pas trop pourquoi..
Marsh Posté le 01-08-2005 à 09:39:10
zapan666 a écrit : Xdebug 2 + KCacheGrind permet en plus d'avoir une représentation visuel de tes appels. (je découvre ça au fur et à mesure la bête ! ) |
Ouais Et WinCacheGrind est ultra merdique à côté de ça
Je@nb a écrit : FlorentG tu utilises XDebug 1 ou 2 ? |
Le 2
Marsh Posté le 02-08-2005 à 13:27:28
Je m'étais fait unssi une classe que j'utilise à l'occasion. Même principe, j'ajoute des étapes et j'affiche un tableau à la fin.
Code :
|
Mais xdebug me parait plus interessant. Faut que je vois comment ça marche. Une fois installé, ça marche tout seul et génère des logs c'est ça ?
Marsh Posté le 02-08-2005 à 14:40:50
Presque. Après faut WinCacheGrind ou KCacheGrind pour exploiter les logs
Marsh Posté le 29-07-2005 à 19:31:35
Voilà, j'ai une méthode un peu particulière pour optimiser mes programmes PHP et comme justement, j'étais en train de bosser dessus, je me suis dit que l'idée pourrait intéresser certains et qu'éventuellement, ceux qui ont d'autres méthodes de travail pourraient conseiller la leur.
J'ai d'abord voulu poster ce message dans le sujet Optimisation né il y a quelquejours, mais il concerne surtout l'intéraction MySQL/PHP alors que ma méthode (qui n'a rien de révolutionnaire, je m'en doute) concerne n'importe quel programme en PHP.
Alors voilà ce que je fais, je place une fonction au tout début de mon script, en général, je la met directement dans le fichier d'appel à la bdd, comme ça, je suis sûr que la fonction sera dispo sur n'importe quelle page du site.
Voici la fonction :
Ensuite, dans mes scripts, au lieu de commenter bêtement avec // je fais un appel à la fonction, par exemple au lieu de mettre :
à la place, je met
Tout à la fin de mon script, je n'ai plus qu'à rajouter :
Résultat, si j'ai bien commenté mon script grace à calctaf(), je sais tout de suite les routines qui pénalisent le plus le temps de génération de la page.
A part le premier chiffre, la fonction va détailler autant que de calctaf( dans le script, en indiquant en premier, le temps depuis le début du script et entre parenthèse, le temps qu'il s'est passé depuis le dernier appel à calctab(), ça permet de mesurer précisément l'intervalle entre 2 points.
Résultat, utiliser ma fonction ne m'a pas pris plus de temps que de bien commenter mes scripts, mais grace à elle, je peux facilement trouver les points où ça pêche et les améliorer.
Une fois mon script au point, je n'ai plus qu'à faire un remplacer rechercher dans Dream (mais tout éditeur doit savoir le faire) sur tout mon site en demandant à remplace "caltaf(" par "//-*->" et à transformer en commentaire la dernière ligne de mon script.
Les questions qu'on pourrait me poser (Ma FAQ de schizophrène où c'est mon coté débile qui pose des questions à mon coté intelligent) :
Pourquoi t'as des noms de variable à la con dans ta fonction ?
=> C'est juste pour éviter que les variables de la fonction n'aient aucune chance d'interférer avec les variables du script vu qu'elles sont globales
Ca prend du temps machine ton truc là ?
=> Oui, comme toute fonction, mais ce temps est ridicule, surtout comparé au temps que ça peut faire gagner pour optimiser un script.
Ce serait pas un peu de la merde ta fonction ?
=> C'est pour ça que je poste ça sur le forum, si quelqu'un a une meilleure méthode, je demande qu'à savoir.
Tu crois pas que tous les pros le savent depuis 10 ans ta méthode à 2 balles ?
=> Va savoir, en tout cas, ça fait 2 ans que je surf sur les sites de PHP et à part la fonction getmicrotime que j'ai chopé je sais plus où, j'ai jamais vu de truc tout fait pour bien calculer le temps d'un script.
Pourquoi tu remplaces calctaf( par //-*-> et pas simplement par // ?
=> Pour pouvoir revenir en arrière et refaire un rechercher remplacer sur //-*-> sans que ça renomme mes commentaires // standard (parce que j'en mets quand même un peu).
Tu sais que tout le monde s'en fout et que personne risque de répondre à ton topic
=> Ouai, mais spa grave, si un newb passe par ici et qu'il fait une recherche sur optimisation PHP, il tombera peut-être sur le sujet et ça pourra le dépanner autant que ça me dépanne.
Et ta femme elle en pense quoi ?
=> Ma femme elle en pense que je devrais passer moins de temps sur les forums et que je devrais bosser un peu plus sur son site.
L'exemple bateau qui tue :
Voilà, des commentaires ?
Message édité par The-Shadow le 30-07-2005 à 00:09:11