So I got NYTProf going. A little search gave me the knowledge that calling a page at
http://example.com/myprog.cgi?foo=bar
is the same as calling it with perl myprog.cgi 'foo=bar'
, which is so good to know, especially since the addition of the NYTProf step is perl -d:NYTProf myprog.cgi 'foo=bar'
.
So, I was able to shave off a second by caching. I could have HOP'd it and just used Memoize, but I like having all the details of a program visible so I don't get bit by something I can't see.
{ # all lines of code with %url_cache are new # URLs have been changed to protect the innocent. my %url_cache ; sub get_service_page { my ( $pi ) = @_ ; if ( $url_cache{ $pi } ) { return $url_cache{ $pi } ; } my $readfile = pi_Readfile() ; my $url = 'http://www.example.edu/~user/projects/XXXXX/' ; my $alt = 'http://www.example.edu/~user/something_else.cgi' ; my $attr = 'SGNAME_PUTATIVE' ; my $sgname = $readfile->{ $pi }->{ $attr } ; if ( ! defined $sgname || '' eq $sgname ) { $url_cache{ $pi } = $alt ; return $alt ; } $url =~ s/XXXXX/$sgname/ ; $url_cache{ $pi } = $url ; return $url ; } }
So, simply by holding onto that little piece of information instead of checking against the same
I don't know why it didn't occur to me to do that in the first place....
pi_Readfile()
each time, I was able to go from 2-3 seconds to 1.2 seconds. And, now that I'm seeing it, I could hold onto the data structure I get from pi_Readfile()
the same way I hold onto the cache, and could probably tighten up even more.I don't know why it didn't occur to me to do that in the first place....
No comments:
Post a Comment