I am working on a web app that uses Perl and I need to look into speeding up portions of the app.
I thought I’d start profiling the particular calls for the portion I wish to investigate. I’ve done some searching on profiling Perl code, but unfortunately most of what I find says that I should run my perl code with -d:DProf myapp from the command line. That doesn’t quite work for me since my code is within a web app. I did find a way to get the profiling to work with apache, but unfortunately, the ‘most used’ modules that came back from the profiler were all CPAN modules — Class::xyz, etc etc etc. Not terribly helpful.
Does anyone know of a good way besides me injecting ‘timer’ code into the methods I wish to profile to target just these methods? I’ve thought of writing a test script and profiling that but due to the nature of the code I’m working on that would require a bit more work than I’m hoping to have to do.
Have you tried Devel::NYTProf (much better than Devel::DProf), which can work under Apache? Which webserver are you using? Is this a vanilla CGI script, a mod_perl thing, or something else?
If you’re doing database stuff, the DBI::Profile can benchmark your queries, which is work happening in another program.
The real trick, however, is to organize the code so that you can do the full spectrum of testing and profiling without having to put it all together at the end to find out something is slow. That won’t help you much in the short term to fight fires, but it does prevent things from becoming fires in the long run. There are also various ways to fake the webserver environment and so on, but that’s a different question. 🙂