Question

Je travaille sur une application Web qui utilise Perl et j'ai besoin de chercher à accélérer certaines parties de l'application.

Je pensais que je commencerais à profiler les appels particuliers pour la partie sur laquelle je souhaite enquêter. J'ai fait quelques recherches sur le profilage du code Perl, mais malheureusement, la plupart de mes recherches indiquent que je devrais exécuter mon code Perl avec -d: DProf myapp à partir de la ligne de commande. Cela ne fonctionne pas vraiment pour moi puisque mon code est dans une application web. J'ai trouvé un moyen de faire en sorte que le profilage fonctionne avec apache, mais malheureusement, le "plus utilisé" Les modules renvoyés par le profileur étaient tous des modules CPAN - Class :: xyz, etc. etc. etc. Pas vraiment utile.

Est-ce que quelqu'un connaît un bon moyen en dehors de moi d'injecter "minuterie"? code dans les méthodes que je souhaite profiler pour cibler uniquement ces méthodes? J'ai pensé écrire un script de test et le profiler, mais en raison de la nature du code sur lequel je travaille, cela nécessiterait un peu plus de travail que ce que j'espère avoir à faire.

Était-ce utile?

La solution

Avez-vous essayé Devel :: NYTProf (beaucoup mieux que Devel :: DProf ), qui peut fonctionner sous Apache? Quel serveur web utilisez-vous? Est-ce un script CGI vanille, une chose mod_perl ou autre chose?

Si vous travaillez dans une base de données, le DBI :: Profile peut Analysez vos requêtes, ce qui représente du travail dans un autre programme.

Cependant, le vrai truc consiste à organiser le code de manière à pouvoir effectuer tout le spectre des tests et du profilage sans avoir à tout mettre en ordre à la fin pour découvrir que quelque chose est lent. Cela ne vous aidera pas beaucoup à court terme à lutter contre les incendies, mais cela empêchera les choses de devenir des incendies à long terme. Il existe également différentes manières de simuler l'environnement du serveur Web, etc., mais la question est différente. :)

Autres conseils

Si vous utilisez CGI.pm, vous pouvez transmettre des arguments à votre script perl en ligne de commande. CGI.pm les interprétera comme s'ils avaient été transmis en tant que paramètres via HTTP. Donc, si vous déboguez, par exemple,

http://example.com/scripts/example.pl?action=browse& ; search = oeillet & amp; restrict = blah

alors vous pouvez simplement appeler à partir de la ligne de commande, par exemple.

perl -d: NYTProf documentroot /scripts/example.pl 'action = parcourir & amp; rechercher = oeillet & amp; restrict = blah'

Vous pouvez utiliser le module Benchmark avec le < strong>: hireswallclock si vous voulez vraiment chronométrer les choses en interne. Mais vraiment, vous devriez pouvoir profiler à partir de la ligne de commande. Vous devrez peut-être écrire des scripts de test pour émuler certaines parties d'une requête CGI, mais DProf peut s'avérer extrêmement utile lorsque vous recherchez des goulots d'étranglement en termes de performances.

Recherchez en particulier où votre code appelle le code du module CPAN. Vous faites peut-être cela beaucoup plus que nécessaire dans les boucles. Par conséquent, si vous passez du temps dans le module CPAN, la modification de votre code peut résoudre le problème.

Je me rends compte qu'il est un peu tard pour le moment, mais c'est l'une des raisons pour lesquelles il est bon d'utiliser CGI :: Application ou une autre architecture dans laquelle l'application Web est un très bref code Web, qui utilise un ensemble de modules que vous avez écrits pour implémenter les fonctionnalités réelles. Utiliser une telle conception permet de profiler (ou simplement de tester) n'importe quel module de la ligne de commande, individuellement ou collectivement, sans se soucier de l'aspect Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top