Frage

ich auf einem Web-App arbeite, das Perl verwendet, und ich muß schauen in Teile der App zu beschleunigen.

Ich dachte, ich würde anfangen, die fordert insbesondere den Abschnitt Profilierungs möchte ich untersuchen. Ich habe einige der Suche getan auf Perl-Code Profilieren, aber leider das meiste, was ich so finde, dass ich meine Perl-Code mit -d:DProf myapp von der Kommandozeile ausgeführt werden. Das nicht ganz für mich arbeiten, da mein Code innerhalb eines Web-App ist. Ich finde, habe einen Weg, um die Profilierung zu bekommen mit Apache zu arbeiten, aber leider der „am häufigsten verwendeten“ Module, die wieder aus dem Profiler kam, waren all CPAN Module -. Klasse :: xyz, etc etc etc. Nicht besonders hilfreich

Kennt jemand eine gute Art und Weise außer mir „Timer“ Code in die Methoden Injektion ich nur diese Methoden zum Ziel profilieren will? Ich habe gedacht, ein Testskript zu schreiben und dass Profilierungs aber aufgrund der Art des Codes arbeite ich an, das wäre ein bisschen mehr Arbeit erfordern, als ich bin der Hoffnung, zu tun zu haben.

War es hilfreich?

Lösung

Haben Sie versucht, Devel :: NYTProf (viel besser als Devel :: DProf ), die unter Apache arbeiten? Welche Web-Server verwenden Sie? Ist das ein Vanille-CGI-Skript, eine mod_perl Sache, oder etwas anderes?

Wenn Sie Datenbank Sachen tun, die DBI :: Profil können Benchmark Ihre Fragen, die Arbeit geschieht in einem anderen Programm ist.

Der eigentliche Trick aber ist, den Code zu organisieren, so dass Sie das volle Spektrum der Tests durchführen können und Profilierung ohne sie alle zusammen am Ende zu setzen, die langsam etwas zu erfahren. Das wird Ihnen nicht viel helfen, die kurzfristig Brände zu bekämpfen, aber es macht die Dinge zu verhindern, dass Brände auf lange Sicht werden. Darüber hinaus gibt es verschiedene Möglichkeiten, um gefälschte Webserver-Umgebung und so weiter, aber das ist eine andere Frage. :)

Andere Tipps

Wenn Sie CGI.pm verwenden, können Sie Argumente zu Ihrem Perl-Skript auf der Kommandozeile übergeben und CGI.pm wird sich interpretieren, als ob sie als Parameter über HTTP übergeben wurden. Also, wenn Sie das Debuggen, z.

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

dann könnte man nur über die Befehlszeile aufrufen, z.

perl -d:NYTProf documentroot/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

Sie können das Benchmark Core-Modul mit dem < strong>: hireswallclock Option, wenn Sie wirklich intern wollen Zeit Dinge. Aber wirklich, sollten Sie in der Lage sein, über die Befehlszeile profilieren. Möglicherweise müssen Testskripte schreiben bestimmte Teile eines CGI-Anforderung zu emulieren, aber DProf extrem nützlich, wenn für Leistungsengpässe suchen.

Insbesondere sucht, wo Ihr Code des CPAN-Modul Code aufruft. Sie können weit mehr als nötig tun dies in Schleifen werden, so dass während der Zeit in dem CPAN-Modul ausgegeben wird, kann Ihren Code Refactoring das Problem beheben.

Ich weiß, es ist ein bisschen zu spät es an dieser Stelle, aber dies ist einer der Gründe, warum es gut ist, zu verwenden, CGI :: Anwendung oder eine andere Architektur, in der die Web-App nur eine sehr kurze wenig bahnseitigen Code ist die Verwendung einer Reihe von Modulen macht Sie geschrieben haben, die eigentliche Funktionalität zu implementieren. Unter Verwendung einer solchen Konstruktion ist es sehr einfach macht zum Profil (oder einfach Test) alle Module von der Kommandozeile, entweder einzeln oder gemeinsam, ohne sich um die Web-Aspekt kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top