PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-05-2009 17:12:43

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Faire une hiérarchie d'appel s'implement...

Bonjour à tous,

Je travail actuellement sur un projet qui fait appel à des Webservices. Notamment un webservice en particulier qui fait des millions de choses et qui plombe les perfs de manières monstrueuse...
Donc je suis dans une architecture objet très profonde... Il faudrait donc que je sois capable de faire la liste des méthodes finales qui feraient appel via d'autre méthodes au webservice en question, et ainsi repérer les méthodes qui appel plus d'une fois le webservice par encapsulation.

Ex :

class toto
{
    public function putNonoAway()
    {
        WebserviceManager::getInstance()->callWebserviceQuiFaitMalAuPerf();
    }

    public function justKiddingNonoYouCanStay()
    {
        WebserviceManager::getInstance()->callWebserviceQuiFaitMalAuPerf();
    }
}

class pasBeau
{
    public function havePityForUglyPeople()
    {
        $oResult = WebserviceManager::getInstance()->callWebserviceQuiFaitMalAuPerf();
        $oToto = new toto();
        $oToto->justKiddingNonoYouCanStay();
        $oToto->putNonoAway();
    }
}

Donc là typiquement lorsque la classe pasBeau utilise la méthode havePityForUglyPeople() le webservice est appelé 3 fois, ce qui provoque une grosse baisse de perfs...

Donc si quelqu'un connaissais un moyen pour que je puisse faire la chasse à ce genre de choses efficacement, il serait le bienvenu ^^

Merci d'avance


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#2 16-05-2009 02:18:51

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Faire une hiérarchie d'appel s'implement...

Saluton,
Si l'on est en PHP5, typiquement, WebserviceManager::getInstance()->callWebserviceQuiFaitMalAuPerf() devrait être intégré dans une interface, non ?
Du coup il te suffirait de recenser quelles classes implémentent cette interface.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 18-05-2009 08:54:50

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Faire une hiérarchie d'appel s'implement...

Euhhhh big_smile

J'aimerai bien mais non...
Je suis même en train de me rendre compte qu'il y a des fonction qui ont été redéfinie un peu partout dans le projet :\


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#4 18-05-2009 09:27:47

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Faire une hiérarchie d'appel s'implement...

Hello,

Alors j'ai trouvé une fonction assez douce qui s'appelle : debug_print_backtrace() debug_print_backtrace()
Qui me donne la backtrace à l'endroit où je la place, donc comme ca j'ai vraiment la méthode finale qui appelle mon webservice.

Il faut juste que je trouve un moyen d'utiliser efficacement les résultats.


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#5 18-05-2009 10:56:31

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Faire une hiérarchie d'appel s'implement...

Bon,

Maintenant je me suis fait une petite fonctionnalité pour m'envoyer le backtrace par mail.
Il faudrait que je trouve un webcrawler ou un web spider pour parcourir le site.

Est ce que quelqu'un en connaitrai un gratuit et surtout simple d'utilisation (si je pouvais éviter les boucles infinies qui ferait tomber le serveur mail de ma boite ca serait mieux ^^)
J'en trouve plein mais je voudrais éviter de polluer ma machine avec des spywares et surtout j'aimerai bien avoir un retour d'expérience de quelqu'un.

Merci d'avance

Dernière modification par Maskime (18-05-2009 10:58:43)


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#6 19-05-2009 11:17:02

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Faire une hiérarchie d'appel s'implement...

Bon à toutes fins utiles, je poste ma solution :

Dans la méthode WebserviceManager::callWebserviceQuiFaitMalAuPerf(), j'ai rajouté un appel à debug_print_backtrace() de la façon suivante :

ob_start();
debug_print_backtrace();
$sOut = ob_get_contents();
ob_end_clean();
if(substr_count($sOut, 'callWebserviceQuiFaitMalAuPerf') >= 2)
{
    mail('mon@mail.com', 'Utilisation selectByFUPID()', $sOut);
}

De cette façon si dans un appel il y a plus d'un appel à la methode 'callWebserviceQuiFaitMalAuPerf' un mail avec le backtrace m'est envoyé.
Ensuite j'ai fais tourné un aspirateur de site  (HTTPTracks) pour passer sur toutes les pages visible du site et ainsi trouver les endroits dans lesquels je pouvais faire de l'optimisation.


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

Pied de page des forums