ProfiPHPProfiPHP
Категория: Полезное в PHP

Ob_end_flush или Ob_get_contents

Узнаем что лучше использовать со стороны быстродействия: Ob_end_flush или Ob_get_contents.

При написании статьи: Простая система кэширования и буферизации, у меня было два варианта вывода пользователю содержимого буфера:
ob_end_flush(  );
Или:
echo ob_get_contents(  );
И так, создадим эксперимент. Для этого в цикле будем помещать в буфер 10000 слов "text", и выводить их разными методами. Узнаем скорость выполнения данных операций:
$btime = microtime( true );
$text = '';
for ( $i = 0; $i < 100; $i++ )
{
ob_start( );
for ( $k = 0; $k < 100; $k++ ) $text .= 'text ';
echo $text;
// выводим содержимое страницы:
ob_end_flush( );
}
echo '('.round( microtime( true ) - $btime, 4 ).' sec.)';
Время, затраченное на выполнения данного скрипта составило 0.036 секунды.

Второй эксперимент:
$btime = microtime( true );
$text = '';
for ( $i = 0; $i < 100; $i++ )
{
ob_start( );
for ( $k = 0; $k < 100; $k++ ) $text .= 'text ';
echo $text;
// выводим содержимое страницы:
echo ob_get_contents( );
}
echo '('.round( microtime( true ) - $btime, 4 ).' sec.)';
Время, затраченное на выполнения второго скрипта составило 0.0037 секунды. Это почти в 10 раз быстрее!

Можно сделать вывод, что функция Ob_end_flush, в связи с тем, что выполняет кроме вывода содержимого буфера еще очистку и отключение буферизации вывода, работает немного медленнее, чем функция Ob_get_contents. Но разница в скорости совсем минимальная. Я даже не представляю себе проектов, в которых будут такие циклы с использованием данных функций. Потому, если использовать их однократно, то результат будет одинаковым.

Добавить комментарий

Имя:
Текст комментария: