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

桝形 誠二 php-users@php.gr.jp
Fri, 26 Jul 2002 15:04:22 +0900


こんにちわ、桝形です。

> 蛇足ですが、どうして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の方が
遅そうに思えましたが、テストしてみると1の方が遅かったです。

テストした環境。
--------------------------
 OS     : RedHat Linux6.2J
 Apache : 1.3.26
 PHP    : 4.2.2(国際化)
--------------------------

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>
----------------------------------------------------------------

理由は分離している分、解釈する必要があるのかなぁ?と
思っていたのですがどうやら考え方が違っているようです。

Apacheに付属しているabで試してみたところ、

[masugata@uranus bin]$ cd /usr/local/apache/bin
[masugata@uranus bin]$ ./ab -n10 -c1 http://イントラドメイン/Test1.php
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking イントラドメイン (be patient).....done
Server Software:        Apache/1.3.26
Server Hostname:        イントラドメイン
Server Port:            80

Document Path:          /Test1.php
Document Length:        2488934 bytes

Concurrency Level:      1
Time taken for tests:   14.612 seconds
Complete requests:      10
Failed requests:        0
Broken pipe errors:     0
Total transferred:      24892290 bytes
HTML transferred:       24889340 bytes
Requests per second:    0.68 [#/sec] (mean)
Time per request:       1461.20 [ms] (mean)
Time per request:       1461.20 [ms] (mean, across all concurrent requests)
Transfer rate:          1703.55 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     0    0.0      0     0
Processing:  1451  1461    6.9   1462  1475
Waiting:     1068  1305  165.2   1451  1465
Total:       1451  1461    6.9   1462  1475

Percentage of the requests served within a certain time (ms)
  50%   1462
  66%   1464
  75%   1464
  80%   1465
  90%   1475
  95%   1475
  98%   1475
  99%   1475
 100%   1475 (last request)

[masugata@uranus bin]$ ./ab -n10 -c1 http://イントラドメイン/Test2.php
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking イントラドメイン (be patient).....done
Server Software:        Apache/1.3.26
Server Hostname:        イントラドメイン
Server Port:            80

Document Path:          /Test2.php
Document Length:        2488934 bytes

Concurrency Level:      1
Time taken for tests:   13.757 seconds
Complete requests:      10
Failed requests:        0
Broken pipe errors:     0
Total transferred:      24892290 bytes
HTML transferred:       24889340 bytes
Requests per second:    0.73 [#/sec] (mean)
Time per request:       1375.70 [ms] (mean)
Time per request:       1375.70 [ms] (mean, across all concurrent requests)
Transfer rate:          1809.43 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     0    0.0      0     0
Processing:  1360  1376   13.8   1373  1402
Waiting:      962  1187  157.9   1276  1369
Total:       1360  1376   13.8   1373  1402

Percentage of the requests served within a certain time (ms)
  50%   1373
  66%   1374
  75%   1379
  80%   1399
  90%   1402
  95%   1402
  98%   1402
  99%   1402
 100%   1402 (last request)

と、わずかながらですが。(^^;

プログラム内部で最初と最後にマイクロ秒単位で記録しておいて
どれくらいかかったかを計測しても1と2では約一秒くらいの差が
あり、abと結果はほとんど変わりませんでした。

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

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

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