2012-04-08 8 views
0

私のPHPスクリプトは約200キロバイトの非常に大きな文字列をエコーし​​ています。そして、この操作自体は何とか実行するのに約2秒かかります。大きな文字列をエコーするのは本当に遅く、それを避ける方法はありますか?

なぜこれが起こっていて、大きな文字列をPHPでブラウザに出力するのが速いのですか?

UPD:私はこの記事の助言を使って解決しました:http://fplanque.com/dev/linux/why-echo-is-slow-in-php-how-to-make-it-really-fast(および出力バッファリング)

+1

エコーをコメントアウトしますか? – miku

+1

*どんな方法でも多くのデータを送信するのは本当に遅くなる可能性があります。 'echo'には何も特別なものはありません。 –

+1

これはどのように測定していますか? – Halcyon

答えて

0

通常、echoを使ってページの内容全体を出力しません。動的に読み込む必要がある部分は、動的コンテンツが必要となるphpタグによって解釈されます。

+1

多くのmvcフレームワークは、最終的にすべてをエコーで出力します。私の意見では全く例外ではありません。 – Iznogood

+0

@Iznogood - ファイルをコピーしてcatを呼び出して別のファイルに出力することの違いです。大きなファイルでは違いが目立つことがあります。 – Neil

+0

この場合、サーバーはPHPの出力からHTMLを生成し、それを正しく送信しますか?私は、HTMLが生成される方法は、クライアントに転送自体より重要であるとは思わない。 – Iznogood

1

文字列を出力するにはPHPを使用する必要がありますか?文字列は動的なものではなく、あなたが常に出力に同じテキストをしたい場合は、この考えてみましょう。あなたは、複数のファイルで同じ文字列を含むと外部ファイルにそれを持っている場合は

<?php 
    $x = func1(); 
    ... 
?> 
<html> 
<!--string goes here--> 
This is an example of a long string... 
</html> 
<?php 
    $y = func2(); 
    //do more stuff with PHP if necessary 
?> 

を、サーバー側が含まれる使用することを検討してください。

+0

文字列は動的で、スクリプトによって生成されます。これはCMSで、最終的にすべてのコンテンツを出力します。 – ax23w4

2

すでに文字列で出力される結果を持っている場合、これはそれを少しエコー-INGのスピードアップがあります。それをキャプチャする

$split = str_split($string, 500); 
foreach ($split as $s) echo $s; 

ない場合は、最初に使用する出力バッファリング。

関連する問題