I tried with and without APC, and it seemed to make no difference.

Ross



2009/1/31 Tom Boutell <[email protected]>:
>
> 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