質問

PHPからhtmlを出力するさまざまな方法に関する質問。これらのパフォーマンスの違いは何ですか:

方法1-変数の連結

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;

方法2-出力バッファリング

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';

変数を継続的に変更および拡大すると、パフォーマンスが低下する可能性があります。正しいですか?

乾杯!

GaryFに感謝しますが、アーキテクチャに関する回答は必要ありません。この質問はパフォーマンスに関するものです。どちらが速いかについて、いくつかの異なる意見/テストがあるようです。そのため、まだ受け入れられている答えはまだありません。

役に立ちましたか?

解決

少し古いですが、この投稿が役立つでしょう。私の知る限り、出力バッファリング関数は非常に高速で効率的であるためechoなので、これを使用します。

他のヒント

文字列連結自体の考えは別として、あなたは本当にあなたがウェブページをどのように構築するべきかを尋ねています(私は思う)、そしてそれはどんな形の明示的な連結もおそらくおそらく間違っていることだと思います。

Model-View-Controlパターンを使用してデータを構築してみてください、それを単純なテンプレートライブラリ( Smarty など)に渡し、ビューの構築方法を心配させます。

より良い分離、より少ない懸念。

通常はメソッド#1を使用するため、静的HTMLを含むテンプレートファイルの任意の場所にHTMLを配置できます。私は、PHPからできるだけ多くのHMTLを排除しようとします。テンプレートは通常別のファイルであるため、PHPがより簡潔で短くなります。

速度/パフォーマンスに関しては、その差は非常に小さいと考えています。出力バッファリングでは、変数は常に拡大されますが、その変数にはアクセスできませんが、どこかに保存する必要があります。

<?phpを開いて閉じるecho $html;は、すべてを<=>に入れてから一度にエコーするよりも遅いのではないかとよく疑問に思います。

最終的には、非常に複雑なスクリプトでミリ秒単位で話していると思います。

ああ、方法#1は<=>どこでもできるので、はるかに柔軟です。

変数を絶えず変更して再印刷する場合、わずかなオーバーヘッドがあることは事実です。ただし、それを しないと、ある時点で(中断などのために)スクリプトの実行が終了する可能性があり、シーケンシャルエコーステートメントは何もしないのではなく部分的にページを印刷します。

PHPの文字列がどのように変更可能か(CやC#のような不変の文字列とは反対)について長い返信を入力するつもりでしたが、出会った古い投稿。基本的に、文字列ビルダーを使用するJavaおよびC#ソリューションに関して、あなたが求めていることを扱います。

補足:stringbuilderソリューションは次のようになります(テストなし):

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);

いくつかの考え:

  • スクリプト全体が実行されるまでユーザーには何も表示されないため、出力バッファリングによりページの表示が遅くなる可能性があります(ただし、#1のセットアップ方法でも同様です)。

  • PHPの文字列はミュート可能であるため、連結は他のいくつかの言語ほど悪くありません。つまり、入力に割り当てられたスペースはデフォルトでかなり大きいため(これ

結局のところ、それは本当にスタイルの問題だと思います。出力バッファリングがあなたを買うものが好きなら、それはおそらく行く方法です。

あなたの質問への回答もここにあります: php:output [] w / join vs $ output。=

文字列の連結は、文字列を構築する最も速い方法です。

<!> quot; echo <!> quotをテストしていません。対文字列構築ですが、バッファリングされた出力エコーを使用していない限り、自己フラッシュバッファへの順次書き込みにより、最も高速になります。 (フラッシュでのスローダウンのみで、事前に文字列連結を行っても実際に回避することはできません)

私が言及したことはありませんが、通常、PHPの人はHTMLを分類したり、他の方法でスタイルを追加したりする必要があるデザイン担当者と協力する必要があるため、ソリューションはそれを念頭に置いておく必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top