You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Mike Ward <un...@gmail.com> on 2004/08/02 17:04:11 UTC
CGI vs. mod_perl.
I'm rather new to mod_perl, so there's my disclaimer.
When I learned perl CGI stuff, it was always done with CGI.pm. All the
example scripts, etc, in the book were done that way. Sending headers,
for example , was done like so:
my $query = CGI->new();
print $query->header();
rather than the style of:
$r->send_http_header();
Is this going to run more slowly, or is there much of a performance
differance, or what differance does it make, exactly? The server is
still running mod_perl, but will not take full advantage of the
increased speed if I'm not using it's apache api (I intend to learn
and start using it anyway, I'm just curious as to the question).
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html
Re: CGI vs. mod_perl.
Posted by Geoffrey Young <ge...@modperlcookbook.org>.
Mike Ward wrote:
> I'm rather new to mod_perl, so there's my disclaimer.
>
> When I learned perl CGI stuff, it was always done with CGI.pm. All the
> example scripts, etc, in the book were done that way. Sending headers,
> for example , was done like so:
>
> my $query = CGI->new();
> print $query->header();
>
> rather than the style of:
>
> $r->send_http_header();
>
>
> Is this going to run more slowly, or is there much of a performance
> differance, or what differance does it make, exactly? The server is
> still running mod_perl, but will not take full advantage of the
> increased speed if I'm not using it's apache api (I intend to learn
> and start using it anyway, I'm just curious as to the question).
ok, there are really three levels to CGI scripts when it comes to mod_perl.
level 1 is standard CGI via mod_cgi (what you have probably done to date)
level 2 is mod_perl via Apache::Registry. Apache::Registry is a mod_cgi
emulator that allows you to take advantage of mod_perl's speed while still
using legacy CGI tools - essentially allowing you move CGI unaltered scripts
between mod_cgi and mod_perl for performance gain (for some definition of
unaltered :)
level 3 is using Apache::Registry as a way to dispatch scripts written using
the mod_perl API, at which point you cannot move them back over to mod_cgi.
outside of CGI scripting are mod_perl handlers (a fourth level), which use
the mod_perl API at various points in the apache request lifecycle
(including content generation).
now, between level 2 and level 3 I'm not exactly sure what the performance
gains would look like (and I don't think it's covered in
http://www.chamas.com/bench/) , but it probably isn't significant enough to
worry about as part of an initial migration step. I suspect that the real
gains to be had in using the API are that you can drop things like the param
parsing of CGI.pm in favor of tools like Apache::Request, but getting the
initial boost from Apache::Registry might be all that you need, depending on
the size of your application.
HTH
--Geoff
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html