=head1 NAME

stopwatch - benchmark mod_perl vs. CGI with File::CounterFile

=head1 DESCRIPTION

I have a stopwatch here. It consists of a CGI program that must be
installed so that it can be accessed both as Apache::Registry routine
and as CGI program. The program assumes that the environment variable
SCRIPT_FILENAME is set and writes different counterfiles for the two
access methods. On the client side I use LWP. Here's the CGI program:

    #!/usr/bin/perl

    use CGI::Switch;
    use File::CounterFile; # part of LWP
    my $q = new CGI::Switch;
    $q->print(
       $q->header,
       $q->start_html(),
       $q->start_form(),
       $q->textfield(-name => "textfield"),
       $q->submit(),
       $q->end_form,
       "<p>textfield = ", $q->param("textfield"),
    );

    my $cfile =
        $ENV{SCRIPT_FILENAME} =~ m{/perl/} ? "C-apache" : "C-cgi";

    my $c = File::CounterFile->new($cfile,"00000000");
    my $id = $c->inc;

    $q->print(
              "<H4>", scalar(localtime()),"</H4>\n",
              sprintf("Accessed %d times (%d)\n",$id,$$),
              $q->end_html,
             );


And here is how I access it:

    perl -MLWP::UserAgent -MURI::URL -e '
    $ua = new LWP::UserAgent;
    $curl = url("http:");
    $curl->query_form(textfield => 12345);
    $req = new HTTP::Request "POST", "http://localhost/perl/forbench";
                                                     # ^^^^^^^^^^^^^
                                                     # change that
    $req->content_type("application/x-www-form-urlencoded");
    $req->content($curl->equery);
    printf "%s\n", $1
        while $ua->request($req)->as_string =~ /(Ac.*)/m;
    '

I have this program run in one window for /perl/forbench and in
another window for /cgi-bin/forbench. While I'm typing this, the two
counters have reached the numbers 5215 and 141. A speed advantage of
37:1 on my Linux box. When I try this on my Indy I get a relation of
20:1. The advantage seems to be system dependent.

=head1 AUTHOR

Andreas J. Koenig <k@anna.in-berlin.de>


