-PHP Tips- 第11回 ob_start

ob_start関数はクッキーやtext/html以外のMIMEタイプを出力するためだけのもの?
【Tips】ob_startを使うと数倍高速!
【Description】ob_start関数はクッキーを用いる場合などによく使われますが、通常のhtmlの出力の際にob_start関数とob_end_flush関数を使うと、echo関数やprint関数などの出力をバッファリングしてからapacheのAPIに出力を引き渡すと考えられるため(phpのソースを見たんですが確認できず(^^ゞ)、高速になります。
バッファリングしない場合、ob_implicit_flush関数を明示する方法もあります。

バッファリングしない場合

<?php
$start_time = getmicrotime();
define("WORK_TIME", 10000);

function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

echo("<html><head><title>バッファリングの比較</title></head><body>");
for($i = 0; $i < WORK_TIME; $i++){
    echo((int)$i."<br>\n");
}
$time = sprintf("%.4f", getmicrotime() - $start_time);
echo("バッファリングをしない場合:".$time."秒</body></html>");
?>

バッファリングする場合

<?php
ob_start();
$start_time = getmicrotime();
define("WORK_TIME", 10000);

function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

echo("<html><head><title>バッファリングの比較</title></head><body>");
for($i = 0; $i < WORK_TIME; $i++){
    echo((int)$i."<br>\n");
}
$time = sprintf("%.4f", getmicrotime() - $start_time);
echo("バッファリングをした場合:".$time."秒</body></html>");
ob_end_flush();
?>
タイトルとURLをコピーしました