2010-12-17 6 views

答えて

12

http://phplens.com/lens/php-book/optimizing-debugging-php.php(記事の最後の3分の1を参照)によると、大きなecho文を使用し、二重引用符の代わりに一重引用符を使用する必要があるため、PHPは文字列内の変数をチェックすることはありません。サポートのための

簡単なテスト:

$bgn = microtime(true); 
for ($i=0; $i<=1000; $i++) 
{ 
    echo $i; 
} 
echo "\n", round(microtime(true)-$bgn, 4), "\n"; 
unset($bgn); 
$bgn = microtime(true); 
$b = ''; 
for ($i=0; $i<=1000; $i++) 
{ 
    $b.=$i; 
} 
echo $b; 
echo "\n", round(microtime(true)-$bgn, 4), "\n"; 
?> 

まず実行リターン0.0022、セカンドランリターン0.0007が...しかし、これはデータの小さなセットがある一方で、メモリ使用量が非常に小さいです。

+0

はい、この記事では、エコーなどでこのようなループを最適化する方法を示す非常に良い例があります。 – Tobias

+0

非常に明確です、助けてくれてありがとう! – vitto

+0

さらにもう一つの愚かなテスト –

4

私は行ごとにエコーします。この方法でメモリを節約します(出力する前にすべての行をメモリにロードする必要はありません)。

時間当たり
+0

私はそれがメモリとスピードのトレードオフだと思います。 – Tobias

1

エコー行、小さいバッファメモリとメモリが少なく、私が選択した答えのために行ったことをテストに基づいて

(あなたがデータを保持する変数を使用する必要はありません)を使用して、それが反対を示して

0

目的によって異なります。時間消費は、フィールドの数に応じて通常は問題にならないため、このアクションのメモリ使用量があります(今日のメモリは1000行で問題が発生しないほど十分です)。

私の気持ちは、変更を加えるために1行ずつエコーする方が現実的かもしれないと私には感じますが、それは全く問題ではないと思います。あなたが好きなことをやりなさい。

1

これは古いです、そしてそれのいくつかは時代遅れですが、あなたはまだ間違いなくあなたはすでに大きく他のすべてを最適化していない限り、それはechoがあなたのボトルネックである可能性は低い、と述べHow Long Is a Piece of String?

をお読みください。

+0

ちょうどあなたのリンクがPHPのオペコードに関する興味深い記事を指していると言います。最適化に興味がなくても非常に有益です。 –

0

ペッカは言ったように、それは問題ではありません。あなたのコードを最も読みやすくするようにしてください(mysql fetch arrayループ内のラームエコーの代わりに、テンプレートを使用することをお勧めします)。

ボトルネックになる場合は、のプロファイルをまず作成し、最適化してください。実際の生命数に基づいています。噂ではありません。

特定の1000行のテーブルに関しては、それを愚かにする。ただページ付けする。
あなたのアプリが無駄な仕事をしないようにしましょう。それはの実の最適化の秘密です。

関連する問題