Hi Matthew,

Are you using 'global_vars', then H::T can be made to have a very
large speed up by replacing the code from lines 2624-2650 with:

  if (scalar(@{$options->{associate}})) {
    my @undef_params;
    foreach my $param (keys %{$self->{param_map}}) {
      next if (defined $self->param($param));
      push @undef_params, $param;
    }
    if (scalar(@undef_params)) {
      my $value;
      # if case sensitive mode or no CGI objects, we can use the
fast path
      if ($options->{case_sensitive} or (grep { !/^1/ } map {
UNIVERSAL::isa($_,'HTML::Template') } @{$options->{associate}}) == 0) {
        foreach my $param (@undef_params) {
          foreach my $associated_object (reverse
@{$options->{associate}}) {
            $value = $associated_object->param($param);
            next unless (defined $value);
            $self->param($param, scalar $value);
            last;
          }
        }
      } else {
        my %case_map;
        foreach my $associated_object (@{$options->{associate}}) {
          map { $case_map{$associated_object}{lc($_)} = $_ }
$associated_object->param();
        }
        my $associated_param;
        foreach my $param (@undef_params) {
          foreach my $associated_object (reverse
@{$options->{associate}}) {
            $associated_param = $case_map{$associated_object}{$param};
            next unless (defined $associated_param);
            $value = $associated_object->param($associated_param);
            next unless (defined $value);
            $self->param($param, scalar $value);
            last;
          }
        }
      }
    }
  }


Basically, the existing code is "loop intensive" - the replacement
code the big loops with smaller loops, thus the code runs faster.
In our app, this change resulted a 10x speedup in some specific cases.

Matthew wrote:
> Hey guys,
> 
>    Over the weekend, we (finally!) moved our company's primary web-app 
> from CGI over to mod_perl and incorporated H::T.  The funny thing is 
> that I started doing some speed comparisons using ApacheBench of our MP 
> version vs CGI.
> 
>     Short story is, both CGI and MP preformed about the same. In some 
> cases CGI was actually faster than MP. This bummed me out. I used 
> Apache::DProf to get an idea of what calls where taking the longest.
> 
>     Turns out that H::T takes at least 25% of the processing time each 
> time a MP request is made. Our CGI was using some in-house "template" 
> system. (ie: file open, search/replace line by line for variables, print 
> out).
> 
>     Like I said, this really bummed me out. For the longest time, CGI 
> was WAY faster than MP, until I turned on cache => 1 in H:T. That was a 
> HUGE improvement, but still CGI is slightly faster.
> 
>     I've already got "use HTML::Template" in my startup.pl so 
> theoretically its being compiled at server start (anyway to verify 
> this?). But its the instantiation in my handler() routine that's using 
> the CPU time.
> 
> How I can I get H:T to preform better?
> 
> Thanks,
> Matthew
> 
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Html-template-users mailing list
> Html-template-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/html-template-users

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Html-template-users mailing list
Html-template-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/html-template-users

Reply via email to