Mathew Robertson ha scritto:
> Hi Hakim,
> 
> I think you might be over analysing the problem. :-)

Heh, that is possible :-)

> 
> When a TMPL_LOOP is encountered, H::T needs to create (for want of a 
> better description) a child context, that contains only the template 
> variables for the child.  Each child context is effectively a new H::T 
> object, so that the very top H::T object accumulates the output from 
> each child.

OK, that makes sense.  I don't understand why DProf is showing more
BEGIN blocks in this case though.  As far as I could see from a scan
of the code it should be just instantiating ->new objects rather than
re-evalling, so I don't understand where this is coming from.

> By removing the LOOP, you are effectively completely avoiding the child 
> context thus saving quite a significant amount of processing.

Ah!  Even if the child process is used to process a loop of 20 items,
if the parent context is large, the whole context is copied non-lazily
to the child?

We have tried running the template output with the largest context
object (dictionary for localisation) turned off, without noticing
any impact on the pathological case.

> If you are looking for performance increases, you should start simply by 
> printing a hi-res time from various points within "output()".  I have 
> done this previously and found that I was able to find a dramatic 
> increase in performance, just by removing foreach() loops. **

That's a possibility, though I think loops are fairly basic
functionality that I'd like not to have to prune from template code...

> regards,
> Mathew Robertson
> 
> ** If you interested, I can send you a patch which ("works for me") 
> speed's up the template-variable symbol resolution.  This patch has 
> achieved close to 20x speed up under some circumstances. Most templates 
> are speed up by about 1.5x.

Shiny!  I'd be interested to take a look,

Thanks and regards,
Hakim


> 
> 
> Hakim Cassimally wrote:
>> Hakim Cassimally wrote:
>>   
>>> Hi,
>>>
>>> We're having an "interesting" problem with a significant slowdown in
>>> processing of some HTML::Template templates.
>>>     
>>
>> The current suspicion, after HTML bod and $boss worked on this,
>> by a process of elimination is that the problem is when the same
>> data structure is used twice in the same ->output() call.
>>
>> So, in some cases, the loop "REGION" below, was used twice in
>> two separate TMPL_LOOP cases.  This seems to add as much as
>> 0.5 seconds every time the parameter is reused.
>>
>> The workaround seems to be to clone the data structure and
>> create two separate parameters, which seems very wrong.  Has
>> anyone else experienced this?  (It might be a feature of our
>> framework code rather than H::T, I'll work on the minimal test
>> case on Friday after a release...)
>>
>> Cheerio,
>> Hakim
>>
>>   
>>> We are using:
>>>   - using H::T 2.8 and 2.9
>>>   - an house framework that feeds params from a CGI object to H::T
>>>   - CGI 2.81 and 3.15
>>>   - Perl 5.8.0 and 5.8.4
>>>
>>> If the following conditions hold:
>>>
>>>   - template X is <TMPL_INCL>uded
>>>   - the parameter "region" is set (for <TMPL_LOOP NAME="REGION">)
>>>
>>> then processing time for the template is approx 1 second longer.
>>>
>>> However
>>>
>>>   - if either the TMPL_INCL or the TMPL_LOOPs are commented, processing
>>>     time is reduced
>>>   - the TMPL_INCL does *not* refer to the TMPL_LOOP, and neither does the
>>>     one template it in turn includes.
>>>
>>> The DProf runs include the following (with some entries for BEGIN on
>>> inhouse modules removed) :
>>>
>>> --------------- without including TMPL_LOOP
>>>
>>> $ dprofpp -rI 
>>> province_noprov.out
>>> Total Elapsed Time = 1.346560 Seconds
>>>           Real Time = 1.346560 Seconds
>>> Inclusive Times
>>> %Time ExclSec CumulS #Calls sec/call Csec/c  Name
>>>   65.7   0.030  0.885      5   0.0060 0.1770  main::BEGIN
>>>   43.8   0.008  0.590      1   0.0083 0.5899  Our::Application::pageOutput
>>>   43.8   0.000  0.590      1   0.0000 0.5897 
>>> Our::Application::printPageOutput
>>>   9.43   0.050  0.127     78   0.0006 0.0016  HTML::Template::BEGIN
>>>   8.69   0.000  0.117    539   0.0000 0.0002  JSON::Parser::value
>>>   8.24   0.120  0.111   9267   0.0000 0.0000  HTML::Template::param
>>>   7.28   0.000  0.098      2   0.0000 0.0488  HTML::Template::_init
>>>
>>> --------------- with the TMPL_LOOP
>>>
>>> $ dprofpp -rI 
>>> province_prov.out
>>> Total Elapsed Time = 2.443450 Seconds
>>>           Real Time = 2.443450 Seconds
>>> Inclusive Times
>>> %Time ExclSec CumulS #Calls sec/call Csec/c  Name
>>>   109.   1.149  2.676    387   0.0030 0.0069  HTML::Template::BEGIN
>>>   76.8   0.000  1.877      1   0.0000 1.8765 
>>> Our::Application::printPageOutput
>>>   76.4   0.027  1.867      1   0.0275 1.8668  Our::Application::pageOutput
>>>   55.5   0.010  1.356      8   0.0012 0.1696  HTML::Template::LOOP::output
>>>   34.9   0.020  0.853      5   0.0040 0.1705  main::BEGIN
>>>   10.4   0.300  0.256  28736   0.0000 0.0000  HTML::Template::param
>>>
>>> e.g. the odd things include
>>>
>>> - "HTML::Template::BEGIN" is called a large number of times.  I don't
>>>    see that many BEGIN { } or 'use' blocks in the H::T code, nor do I
>>> understand why they would be called because of a TMPL_INCL
>>>
>>> - HTML::Template::LOOP::output takes proportionally much longer.
>>>
>>> I'm sorry that this isn't a minimal test case - I'm working with our
>>> HTML editor to try to identify what it is!  But if anyone has any
>>> suggestions on where to start trying to debug this, I'd be interested,
>>> and grateful, to see what you suggest.
>>>
>>> Regards,
>>>
>>> Hakim (osfameron)
>>>     
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by DB2 Express
>> Download DB2 Express C - the FREE version of DB2 express and take
>> control of your XML. No limits. Just data. Click to get it now.
>> http://sourceforge.net/powerbar/db2/
>> _______________________________________________
>> Html-template-users mailing list
>> Html-template-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/html-template-users
>>   


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Html-template-users mailing list
Html-template-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/html-template-users

Reply via email to