Many points to Ross for empirically testing the issue.

But if you tried those tests again with a bytecode cache I suspect the
difference would go away entirely.

Also the Quercus reimplementation of PHP in Java, which apparently
runs at... oh, about the same speed as the bytecode cache, that's
nicely honest of them (:

http://www.caucho.com/resin-3.0/quercus/

On Sat, Jan 31, 2009 at 7:14 AM, Ross Motley <[email protected]> wrote:
>
> For interest, I just ran a completely unscientific speed test for both
> styles of template, in particular, I wondered if there is much of an
> overhead for PHP switching in and out of <?php ?> tags.
>
> I tried three templates, the nice looking symfony one, one with no
> <?php ?> tag switching and a similar amount of whitespace and one with
> no <?php ?> tag switching and no whitespace.
>
> When looping through 10000 items, I found that not using <?php ?> tags
> in the template is around 20% faster.  The difference between the
> whitespace and non white space versions was neglible.
>
> Not that I think this is a compelling reason not to use them, since
> when dealing with more sensible numbers (say, 250 items in a template
> as mentioned), on my dev machine the saving amounts to something like
> 0.05% of the total page execution time.
>
> Of course, it may vary greatly in your environment :)
>
> Here's the code I ran:
>
>
> <?php
> $myArray = array();
> for ($i = 1; $i <= 250; $i++) {
>        $myArray[$i] = array();
>        for ($j = 1; $j <= 10; $j++) {
>                $myArray[$i][] = rand(0, 10);
>        }
> }?>
>
> <?php
> ob_start();
> $start2 = microtime(true);
>
> echo "<ul>\n";
> foreach($myArray as $key => $item) {
>        echo "  <li>Item number $key has entries:\n";
>        echo "  <ul>\n";
>        foreach($item as $number) {
>                echo "    <li>" . $number;
>                if ($number > 5) {
>                        echo ' (Greater than 5!)';
>                }
>                echo "</li>\n";
>        }
>        echo "    </ul>\n";
>        echo "  </li>\n";
> }
> echo "</ul>\n";
>
> $end2 = microtime(true);
>
> ob_end_clean();
> ?>
>
> <?php
> ob_start();
> $start3 = microtime(true);
>
> echo '<ul>';
> foreach($myArray as $key => $item) {
>        echo '<li>Item number ' . $key  . 'has entries:<ul>';
>        foreach($item as $number) {
>                echo '<li>' . $number;
>                if ($number > 5) {
>                        echo ' (Greater than 5!)';
>                }
>                echo '</li>';
>        }
>        echo '</ul></li>';
> }
> echo '</ul>';
> $end3 = microtime(true);
>
> ob_end_clean();
> ?>
>
> <?php
> $start1 = microtime(true);
> ob_start();
> ?>
> <ul>
> <?php foreach($myArray as $key => $item): ?>
>  <li>Item number <?php echo $key ?> has entries:
>  <ul>
>  <?php foreach($item as $number): ?>
>    <li><?php echo $number ?>
>    <?php if ($number > 5): ?>
>      (Greater than 5!)
>    <?php endif; ?>
>    </li>
>  <?php endforeach; ?>
>  </ul>
>  </li>
> <?php endforeach; ?>
> </ul>
> <?php
> ob_end_clean();
> $end1 = microtime(true);
> ?>
>
>
> <?php
> $time1 = ($end1 - $start1)*1000;
> $time2 = ($end2 - $start2)*1000;
> $time3 = ($end3 - $start3)*1000;
> echo "Symfony style: " .  $time1. "ms<br/>";
> echo "Other style, some whitespace: " . $time2 . "ms<br/>";
> echo "Other style, no whitespace: " . $time3 . "ms<br/>";
>
> echo "<br/>Other some whitespace is: " . round(100*($time2 -
> $time1)/$time1) . "% time taken<br/>";
> echo "Other no whitespace is: " . round(100*($time3 - $time1)/$time1)
> . "% time taken<br/>";
>
>
>
> Ross
>
>
>
>
>
>
>
> 2009/1/31 colnector (colnect.com) <[email protected]>:
>>
>> Thank you all for your insights. On my website I'm already using APC,
>> Symfony's cache and mod_gzip.
>>
>> Mostly an extra space or another <?php ?> block is completely
>> negligible. However, sometimes pages becomes heavy (for example, a
>> user on my site may see the following list including 250 items:
>> http://coins.colnect.com/en/coins/list/country/2504). In such cases, I
>> believe the issues I've mentioned need be considered. Also, my site is
>> highly dynamic so I cannot cache the really heavy pages (since each
>> collector sees the page differently based on his personal collection
>> which can change on any click he/she does).
>>
>> Yes, hardware is getting cheaper and cheaper and code is getting more
>> and more bloated.
>>
>> About readability, I actually have a big problem with Symfony's way of
>> adding more <?php ?> blocks. Obviously the example I've included
>> didn't demonstrate if but if we add a few IFs and FORs, then consider
>> these two:
>>
>> Symfony style:
>> <?php if (true && do_some_function(array(1, 3, $var), $stuff)) : ?>
>> <ul>
>>  <?php foreach($myArray as $item) : ?>
>>     <li><?php echo link_to($item['display_name'],
>> myClass::getItemDisplayModule($item).'/action',
>>                array('class' => 'some_css_class', 'whatever' =>
>> 'gever')); ?></li>
>>  <?php endforeach; ?>
>> </ul>
>> <?php endif; ?>
>>
>> A more optimized PHP script could be:
>>
>> <?php if (true && do_some_function(array(1, 3, $var), $stuff)) {
>>  echo '<ul>';
>>  foreach($myArray as $item) {
>>    echo '<li>'
>>       .link_to($item['display_name'], myClass::getItemDisplayModule
>> ($item).'/action',
>>          array('class' => 'some_css_class', 'whatever' => 'gever'))
>>       .'</li>';
>>  }
>>  echo '</ul>';
>> } ?>
>>
>>
>> Do you still find the first example more readable?
>> >
>>
>
> >
>



-- 
Tom Boutell

www.punkave.com
www.boutell.com

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/symfony-devs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to