JFYI & SCNR, I produced some synthetic numbers of the performance comparing the new output control layer with the old one -- actually because I expected the new code to be less efficient than the one we had.
I didn't have the chance to do this until now, because comparing php-unicode with php-5.x would have been even more useless ;) Anyway, running the script listed at the end of this message gave me quite surprising results, and still leaves me suspicious: Running in trunk with std-output-api: m...@waldrapp:~/tmp/php-trunk-old-output$ ./sapi/cli/php ~/tmp/ob_bench.php Running 50000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.6 / 0.6 MB > 10000 - 0.172s: 168.3 / 178.2 MB > 20000 - 0.340s: 335.9 / 355.5 MB > 30000 - 0.506s: 503.5 / 532.8 MB > 40000 - 0.671s: 671.2 / 710.2 MB > 50000 - 0.836s: 838.8 / 887.5 MB Cleaning up 25001 output handlers Done, total time: 1.362s, peak mem: 838.8 / 887.5 MB Running in current trunk with new-output-api: m...@waldrapp:~/build/php-trunk-debug$ ./sapi/cli/php ~/tmp/ob_bench.php Running 50000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.6 / 0.6 MB > 10000 - 0.104s: 69.0 / 71.7 MB > 20000 - 0.204s: 137.4 / 142.7 MB > 30000 - 0.304s: 205.8 / 213.7 MB > 40000 - 0.405s: 274.2 / 284.7 MB > 50000 - 0.506s: 342.5 / 355.7 MB Cleaning up 25001 output handlers Done, total time: 0.740s, peak mem: 342.6 / 355.7 MB Now the script: <?php ini_set("memory_limit", "2G"); function mib($b) { return $b ? number_format($b/1024/1204, 1, ".", "'") : "?"; } function mgu($r, $p = false) { return mib($p ? memory_get_peak_usage($r) : memory_get_usage($r)); } function obs($i) { global $start; fprintf(STDERR, "> %6d - %6.3fs: %10s /%10s MB\n", $i, microtime(true)-$start, mgu(false), mgu(true) ); } $loop = @$argv[1] ?: 50000; $data = @$argv[2] ?: str_repeat(" ", 0x3fff); fprintf(STDERR, "Running %d times with a %d bytes long string ('%s...')\n", $loop, strlen($data), substr($data, 0, 3) ); $start = microtime(true); for ($i = 0; $i < $loop; ++$i) { ob_start(); echo $data; if (!($i % 10000)) { obs($i); } if ($i % 2) { ob_flush(); } elseif ($i) { ob_end_clean(); } } obs($i); fprintf(STDERR, "\nCleaning up %d output handlers\n", ob_get_level() ); while(ob_get_level()) ob_end_clean(); fprintf(STDERR, "Done, total time: %6.3fs, peak mem: %s / %s MB\n", microtime(true)-$start, mgu(false, true), mgu(true, true) ); Cheers, Mike -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php