[PHP-users 8988] Re: パースの際の改行の扱い

Youichi Iwakiri php-users@php.gr.jp
Fri, 26 Jul 2002 20:26:35 +0900


いわきりです

#読み飛ばしていました

桝形 誠二 wrote in <200207260604.PAA41852@azusa.digicom.dnp.co.jp> :
>上記の事を考えると、下記の様なスクリプトでは1より2の方が
>遅そうに思えましたが、テストしてみると1の方が遅かったです。
>Test1.php:
>----------------------------------------------------------------
><?
>echo "<HTML>\n";
>echo "<HEAD></HEAD>\n";
>echo "<BODY>\n";
>
>for( $XX = 0; $XX < 50000; ++$XX )
>{
> echo "<B><FONT COLOR=\"black\">Test[".$XX."]</FONT></B><BR>\n";
>}
>
>echo "</BODY>\n";
>echo "</HTML>\n";
>?>

>----------------------------------------------------------------
>
>Test2.php:
>----------------------------------------------------------------
><HTML>
><HEAD></HEAD>
><BODY>
><? for( $XX = 0; $XX < 50000; ++$XX ) ?>
><B><FONT COLOR="black">Test[<? echo $XX; ?>]</FONT></B><BR>
><? endfor; ?>
></BODY>
></HTML>
>----------------------------------------------------------------
>理由は分離している分、解釈する必要があるのかなぁ?と
>思っていたのですがどうやら考え方が違っているようです。

実行前の中間コードへのコンパイル時間はソースコードによって変わってくるので
一概にどちらが速いかはわかり辛いです。

>このからくりはどうなっているのでしょうか?
>識者の方、ご教授願います。m(_ _)m

ぱっと見でのtest1, test2の大きな違いは、中間コードの違いです。
大垣さんは説明のため、敢えて下記のコードは等価と書かれていますが、
実際は、

sample1.php は
ZEND_ECHO '<HTML>\n<HEAD></HEAD>\n<BODY>\n</BODY>\n</HTML>\n'
であり

sample2.php は
ZEND_ECHO '<HTML>\n'
ZEND_ECHO '<HEAD></HEAD>\n'
ZEND_ECHO '<BODY>\n'
ZEND_ECHO '</BODY>\n'
ZEND_ECHO '</HTML>\n'

と複数の内部コードで実行されています。
#当然sample1の方が速い

sample1.php ( phpのコーディングはいっさい無くてもPHPに処理させる)
------------------------------------------
<HTML>
<HEAD></HEAD>
<BODY>
</BODY>
</HTML>
------------------------------------------

sample2.php
------------------------------------------
echo '<HTML>\n';
echo '<HEAD></HEAD>\n';
echo '<BODY>\n';
echo '</BODY>\n';
echo '</HTML>\n';
------------------------------------------

-- 
Youichi Iwakiri