ONK
Пассивист PHPСluba
Скачал для своих нужд этот тест http://template-bench.iliakantor.ru/
Погонял на нашем экстеншене, очень остался не доволен методикой измерения времени исполнения тестов. Чем больше итераций, тем менее предсказуемый результат с бОльшим разбросом и меньшей повторяемостью.
В связи с этим предложение отказаться от округления в 6-м знаке, и вычислять не устреднённое время выполнения тестов по всем итерациям, а минимальное время за все попытки для каждого теста. Это сокращает разброс на 50 итераций до менее одного процента.
Собcтвенно прелагаю вот такой код вместо аналогичного куска из index.php
Погонял на нашем экстеншене, очень остался не доволен методикой измерения времени исполнения тестов. Чем больше итераций, тем менее предсказуемый результат с бОльшим разбросом и меньшей повторяемостью.
В связи с этим предложение отказаться от округления в 6-м знаке, и вычислять не устреднённое время выполнения тестов по всем итерациям, а минимальное время за все попытки для каждого теста. Это сокращает разброс на 50 итераций до менее одного процента.
Собcтвенно прелагаю вот такой код вместо аналогичного куска из index.php
PHP:
ob_start();
# first iteration ignored due to caching etc.
for ($n=0; $n<=$iterations; $n++) {
foreach ($engine as $template_engine) {
$path = "./$template_engine"; # for test functions
$func = $template_engine.'_test';
if ($n) {
echo "$template_engine ";
}
$_begin = microtime();
$res = $func();
$_end = microtime();
$_begin = explode(" ",$_begin);
$_end = explode(" ",$_end);
$diff = $_end[1] - $_begin[1] + $_end[0] - $_begin[0];
if ($n) {
if($timing[$template_engine] > $diff){
$timing[$template_engine] = round($diff,8);
$length[$template_engine] = $res;
}
echo "$diff $res <br>";
}else{
$timing[$template_engine] = round($diff,8);
$length[$template_engine] = $res;
}
}
}
ob_end_clean();
# sort by time and output
asort($timing);
list(,$time_min) = each($timing);