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

桝形 誠二 php-users@php.gr.jp
Fri, 26 Jul 2002 17:12:33 +0900


桝形です。

> >上記の事を考えると、下記の様なスクリプトでは1より2の方が
> >遅そうに思えましたが、テストしてみると1の方が遅かったです。
> 
> 1のほうは、echoする文字列が " " で括られてるので、
> 内容をその都度、変数展開の処理に通すからじゃない
> でしょうか?
> 
> 2のほうでは、<? ?> の外にあるHTML文は全くPHPの処理
> 対象になりませんので、その分早そうです。
> 
> 1のほうでも ' ' で括ったり、\nも予め変数に入れてお
> いてechoすると2の速度にかなり近くなるように思います。

試しに下記の様なスクリプトを試しても近くはなりませんでした。

<?
$Cr = "\n";
echo '<HTML>'.$Cr;
echo '<HEAD></HEAD>'.$Cr;
echo '<BODY>'.$Cr;

for( $XX = 0; $XX < 50000; ++$XX )
{
 echo '<B><FONT COLOR="black">Test['.$XX.']</FONT></B><BR>'.$Cr;
}

echo '</BODY>'.$Cr;
echo '</HTML>'.$Cr;
?>

スクリプトに不備があれば突っ込み願います。

また、

> 2のほうでは、<? ?> の外にあるHTML文は全くPHPの処理
> 対象になりませんので、その分早そうです。

は、元々理解できていないという訳ではなく(僕もPHPを始めた頃から
なんとなくそうなんだろうなぁ。。。と思っていました。:-))、
大垣さんの、

> > 蛇足ですが、どうしてPHPでは普通のHTML部分をif条件/ループで
> > 囲んで出力が制御できるのか不思議に思っている方もいらっしゃる
> > のでは?
> > 
> > これは
> > 
> > <?php if ($condition) { ?>
> > <tr><td>SOMETHING HERE</td></tr>
> > <?php } else { ?>
> > <tr><td>ANYTHING HERE</td></tr>
> > <?php } ?>
> > 
> > が
> > 
> > <?php
> > if ($condition) {
> >  echo '<tr><td>SOMETHING HERE</td></tr>\n';
> > } else {
> >  echo '<tr><td>ANYTHING HERE</td></tr>\n';
> > }
> > ?>
> > 
> > と同じだからです。

と、あるように、内容は違っていても結果的に1と2を同じ処理と
見たてている分、エンジン的に負荷が掛かっているのは、2の方
ではないのかなぁ?と思いメールさせていただきました。

同じ処理と見たてるオーバーヘッドよりも、総合的には出力する
( echoする回数 )オーバーヘッドの方が大きいという事なので
しょうかねぇ。。。

同じと見立てているのか、コンパイルした時に統一されているのか。。。?

本題とは関係ないですが、僕のコーディングスタイルは2ですので。(^^;
_______________________

  桝形 誠二( Masugata Seiji )
  E-Mail : s.masugata@digicom.dnp.co.jp

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄