С http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why
Этот старый отчет об ошибке может пролить некоторый свет.Короче говоря, использование echo для отправки больших строк в браузер приводит к ужасной производительности из-за того, что Алгоритм Nagle приводит к буферизации данных для передачи по TCP / IP.
Решение?Простая функция из трех строк, которая разбивает большие строки на более мелкие фрагменты перед тем, как их выводить:
function echobig($string, $bufferSize = 8192) {
$splitString = str_split($string, $bufferSize);
foreach($splitString as $chunk) { echo $chunk; }
}
Поэкспериментируйте с размером буфера и посмотрите, что работает лучше для вас.Я обнаружил, что 8192, помимо хорошего круглого числа, казалось, хорошего размера.Некоторые другие значения тоже работают, но я не смог распознать закономерность после нескольких минут работы, и очевидно, что есть какая-то математика в работе, которую я не хочу пытаться выяснить.
Кстати,Падение производительности также происходит при использовании функций управления выводом PHP (ob_start () и друзья)
После комментария OP, что он попробовал это, я также нашел следующее на PHP.net, предполагая, что str_split также может быть пустой тратой ресурсови функция echobig может быть дополнительно оптимизирована с помощью следующего кода:
function echobig($string, $bufferSize = 8192) {
// suggest doing a test for Integer & positive bufferSize
for ($chars=strlen($string)-1,$start=0;$start <= $chars;$start += $bufferSize) {
echo substr($string,$start,$buffer_size);
}
}
Вы пытались запустить свой сценарий, используя CLI, а не через Apache?