2

以下の例で、PHP を短時間で実行するにはどうすればよいでしょうか? ケースAまたはB?これを適切にテストする方法は?

これにより、短時間で処理が高速になります。

ケース A:

/* -------------------------------------------------
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
------------------------------------------------- */

またはこれで?

ケース B:

/****************************************************
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
*****************************************************/

たとえば、テスト用にこのコードを使用しました。

<?php
echo '<pre>';

$s = microtime(true);
for ($i=0; $i<=10000000; $i++) {
/* -------------------------------------------------

------------------------------------------------- */
}
echo "1: ";
$r1 = microtime(true) - $s;
echo $r1;
echo "\n";

$s2 = microtime(true);
for ($i=0; $i<=10000000; $i++) {
/* -------------------------------------------------
    some information inside commenting rules
------------------------------------------------- */
}
echo "2: ";
$r2 = microtime(true) - $s2;
echo $r2;
echo "\n";

$s3 = microtime(true);
for ($i=0; $i<=10000000; $i++) {
/* -------------------------------------------------
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
------------------------------------------------- */
}
echo "3: ";
$r3 = microtime(true) - $s3;
echo $r3;
echo "\n";


$s4 = microtime(true);
for ($i=0; $i<=10000000; $i++) {
/****************************************************
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
    some information inside commenting rules
*****************************************************/
}
echo "4: ";
$r4 = microtime(true) - $s4;
echo $r4;
echo "\n";

$result = array('1 without text', $r1,
      '2 single line', $r2,
      '3 multiline separator', $r3,
      '4 multiline starred', $r4);

echo min($result);

echo '</pre>';

結果は、実行とメモリ操作によって異なる場合があります。ほとんどの場合、私の場合の結果はCASE Bです。

あなたの結果はどうですか?

4

2 に答える 2

1

最終結果: DOCBLOCK の勝利。

結果:

最も遅い CASE A よりも 8 ミリ秒高速です。何百万ものコメントに対する Docblocks には約 237 ミリ秒かかります。

比較:

 CASE     SECONDS:    EXAMPLE CODE:
 A:       0.304       /******************** comment ********************/
 B:       0.343       /*------------------- comment ---------------------*/
 C:       0.293       /*                    comment                    */
 D:       0.237       /**
                       * comment
                       */

 [millions of comments in separated files]

テストの結果:

ケース A の場合:

/******************** comment ********************/

0.31907296180725
0.31833505630493
0.31972694396973

ケース B の場合:

/*------------------- comment ---------------------*/

0.2824490070343
0.28207182884216
0.28176498413086

結果は ms (ミリ秒) になります。実行コードまたは別のファイルとしてロードするコードを注文しましたが、結果は同じなので、正しくテストされていることを確認してください。

結果:

したがって、1 つのファイルに 100 万件のコメントがある場合、CASE B は CASE A よりも高速です。ケース Bは、平均 3 ミリ秒高速です。

ケース B および C よりも高速:

私はこの新しいものでテストしました:

/*                    comment                    */

0.27404689788818
0.27441191673279
0.27490782737732

したがって、私のプロジェクトでは、CASE A または B および C のようになることはありません。

最後に D, DOCBLOCK :

最後に、DOCBLOCKが最速です。

/**
 * comment
 */
[NL]

0.23765897750854
于 2013-08-14T21:58:41.620 に答える
1

コメントは字句解析時に削除されるため、特に上記のベンチマークでは、その内容は無関係です。

ファイル内の 2 つの複数行コメントが合計で同じバイト数である場合、それらは PHP に対してまったく同じ効果をもたらします。コメントが大きいほど、完全に処理されてから破棄されるまでにより多くの時間がかかりますが、それでも、レクシング フェーズについて話しているのです。 bytes コメントして違いに注意してください。

オペコード キャッシュを使用する場合 (または、オペ コード キャッシュが組み込まれている Apache モジュールまたは FCGI として PHP 5.5+ を実行する場合)、違いは見られません。字句解析と解析が一度だけ行われるようにすることです。

テストを行うことを主張する場合は、少なくとも外部から行います。次のような内容のファイルを作成します。

<?php
$start = microtime(true);
include 'test.php';
echo microtime(true) - $start;

そして、「test.php」を、テストするファイルの名前に置き換えます。とにかく違いは重要ではないので、すべてのテストファイルを数回実行してください。違いをより明確にするために、そのファイルに対して何百万ものコメントを生成することができます。ジェネレーターの例を次に示します。

<?php
$file = '<?php';
for ($i=0; $i<1000000; $i++) {
    $file .= "/* comment */\n";
}
$file .= '?>';
file_put_contents('test.php', $file);

ほぼ同じバイト数のコメントでは、統計的に有意な違いは見られないはずです。

于 2013-08-14T21:18:58.980 に答える