Re: [htmltmpl] HTML::Template::Compile - anonymous sub and eval H::T
Brought to you by:
samtregar
From: Mathew R. <mat...@re...> - 2004-10-07 00:05:54
|
what a good idea... could you make the code available? Mathew ----- Original Message -----=20 From: Bob Diss=20 To: htm...@li...=20 Sent: Thursday, October 07, 2004 7:06 AM Subject: [htmltmpl] HTML::Template::Compile - anonymous sub and eval = H::T An item I ran into lately is a desire to squeeze even more performance = out of H::T. Since I'm in a mod_perl environment, I typically load up a = handfull of templates and then render them over and over again. To help = this out, I built a version of H::T that cross-compiles the stack-based = code into an anonymous sub(), and then eval's it to render the output. = I've found this to offer a significant performance benefit over stock = H::T. One thing to know about my environment is that I'm on a Win32 platform = (currently). Therefore, H::T::JIT wasn't an option for me. Anyway, here's some performance numbers. This is a simple program = that creates a template, loads a bunch of parameters, and then renders = it 100 times. I've included the dprofpp results for H::T and = H::T::Compile. HTML::Template -------------- C:\Test>perl -d:DProf foo.pl C:\Test>dprofpp Total Elapsed Time =3D 152.7336 Seconds User+System Time =3D 151.4206 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 86.7 131.4 155.75 11400 0.0115 0.0137 HTML::Template::output 11.8 17.92 17.921 539401 0.0000 0.0000 HTML::Template::param 1.56 2.369 2.369 52900 0.0000 0.0000 = HTML::Template::_globalize_vars 1.33 2.020 2.020 52900 0.0000 0.0000 = HTML::Template::_unglobalize_vars 0.66 1.000 1.000 11300 0.0001 0.0001 = HTML::Template::clear_params 0.48 0.722 151.05 1200 0.0006 0.1259 = HTML::Template::LOOP::output 0.24 0.357 0.392 1 0.3567 0.3925 HTML::Template::_parse 0.11 0.169 0.169 4900 0.0000 0.0000 = HTML::Template::URLESCAPE::escape 0.10 0.144 0.144 5800 0.0000 0.0000 = HTML::Template::ESCAPE::escape 0.05 0.070 0.139 1 0.0699 0.1392 main::BEGIN 0.03 0.050 0.069 9 0.0055 0.0077 HTML::Template::BEGIN 0.01 0.020 0.020 1 0.0200 0.0200 = HTML::Template::_init_template 0.01 0.017 0.017 577 0.0000 0.0000 HTML::Template::VAR::new 0.01 0.010 0.010 2 0.0050 0.0050 DynaLoader::BEGIN 0.01 0.010 0.010 3 0.0033 0.0033 vars::BEGIN C:\Test>dprofpp -r Total Elapsed Time =3D 152.7046 Seconds Real Time =3D 152.7046 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 86.8 132.5 157.04 11400 0.0116 0.0138 HTML::Template::output 11.7 17.94 17.945 539401 0.0000 0.0000 HTML::Template::param 1.58 2.410 2.410 52900 0.0000 0.0000 = HTML::Template::_globalize_vars 1.33 2.025 2.025 52900 0.0000 0.0000 = HTML::Template::_unglobalize_vars 0.66 1.009 1.009 11300 0.0001 0.0001 = HTML::Template::clear_params 0.49 0.742 152.31 1200 0.0006 0.1269 = HTML::Template::LOOP::output 0.24 0.367 0.402 1 0.3667 0.4025 HTML::Template::_parse 0.11 0.168 0.168 4900 0.0000 0.0000 = HTML::Template::URLESCAPE::escape 0.10 0.154 0.154 5800 0.0000 0.0000 = HTML::Template::ESCAPE::escape 0.05 0.070 0.149 1 0.0699 0.1492 main::BEGIN 0.03 0.050 0.079 9 0.0055 0.0088 HTML::Template::BEGIN 0.01 0.020 0.020 1 0.0200 0.0200 = HTML::Template::_init_template 0.01 0.020 0.020 3 0.0067 0.0066 vars::BEGIN 0.01 0.017 0.017 577 0.0000 0.0000 HTML::Template::VAR::new 0.01 0.010 0.010 2 0.0050 0.0050 DynaLoader::BEGIN HTML::Template::Compile ----------------------- C:\Test>perl -d:DProf bar.pl C:\Test>dprofpp Exporter::export has -6 unstacked calls in outer Exporter::Heavy::heavy_export has 6 unstacked calls in outer Total Elapsed Time =3D 36.19448 Seconds User+System Time =3D 35.85548 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 43.6 15.65 27.876 11400 0.0014 0.0024 = HTML::Template::Compile::_runtime_ start 36.5 13.12 13.121 403804 0.0000 0.0000 HTML::Template::param 7.93 2.845 38.938 100 0.0285 0.3894 = HTML::Template::Compile::__ANON__ 6.69 2.397 2.397 52900 0.0000 0.0000 = HTML::Template::_globalize_vars 6.00 2.150 2.150 52900 0.0000 0.0000 = HTML::Template::_unglobalize_vars 4.15 1.489 1.621 87300 0.0000 0.0000 = HTML::Template::Compile::_runtime_ deref 2.97 1.065 1.065 11300 0.0001 0.0001 = HTML::Template::clear_params 1.84 0.661 0.752 1 0.6610 0.7515 = HTML::Template::Compile::_compile 1.05 0.377 0.392 1 0.3767 0.3925 HTML::Template::_parse 0.25 0.088 2.239 11400 0.0000 0.0002 = HTML::Template::Compile::_runtime_ stop 0.24 0.085 0.091 43 0.0020 0.0021 = HTML::Template::Compile::_generate 0.23 0.084 0.084 5800 0.0000 0.0000 = HTML::Template::Compile::_runtime_ escape 0.22 0.079 0.078 101 0.0008 0.0008 = HTML::Template::_find_file 0.17 0.060 0.248 8 0.0075 0.0310 = HTML::Template::Compile::BEGIN 0.14 0.050 0.079 9 0.0055 0.0088 HTML::Template::BEGIN C:\Test>dprofpp -r Exporter::export has -6 unstacked calls in outer Exporter::Heavy::heavy_export has 6 unstacked calls in outer Total Elapsed Time =3D 36.14248 Seconds Real Time =3D 36.14248 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 44.1 15.93 28.116 11400 0.0014 0.0025 = HTML::Template::Compile::_runtime_ start 36.1 13.05 13.053 403804 0.0000 0.0000 HTML::Template::param 8.17 2.954 39.267 100 0.0295 0.3927 = HTML::Template::Compile::__ANON__ 6.69 2.419 2.419 52900 0.0000 0.0000 = HTML::Template::_globalize_vars 5.97 2.158 2.158 52900 0.0000 0.0000 = HTML::Template::_unglobalize_vars 4.02 1.453 1.605 87300 0.0000 0.0000 = HTML::Template::Compile::_runtime_ deref 2.91 1.051 1.051 11300 0.0001 0.0001 = HTML::Template::clear_params 1.83 0.661 0.752 1 0.6610 0.7515 = HTML::Template::Compile::_compile 1.04 0.377 0.392 1 0.3767 0.3925 HTML::Template::_parse 0.26 0.094 0.094 5800 0.0000 0.0000 = HTML::Template::Compile::_runtime_ escape 0.24 0.088 2.247 11400 0.0000 0.0002 = HTML::Template::Compile::_runtime_ stop 0.24 0.085 0.091 43 0.0020 0.0021 = HTML::Template::Compile::_generate 0.19 0.069 0.078 101 0.0007 0.0008 = HTML::Template::_find_file 0.17 0.060 0.258 8 0.0075 0.0322 = HTML::Template::Compile::BEGIN 0.16 0.058 0.058 4900 0.0000 0.0000 = HTML::Template::Compile::_runtime_ urlescape I've been using this on my site for about a month now. It supports = all of the features of H::T, and also includes the enhancements I've = done locally. I would like to figure out a way to share it (if it's of = interest) 'cause I'm sure the manner in which it's implemented could = always be improved. - Bob Diss -------------------------------------------------------------------------= ----- Do you Yahoo!? vote.yahoo.com - Register online to vote today! |