понедельник, 9 июля 2012 г.

Заметка о microtime

Всегда удивляло одно странное использование способа измерения скорости.
Как поступает новичёк, когда ему надо узнать время исполнения скрипта:
<?php
$t=microtime();
$t_ar=explode(chr(32), $t);
$t=$t_ar[0]+$t_ar[1];
//Исполняем код, а в конце:
$t2=microtime();
$t2_ar=explode(chr(32), $t);
$t2=$t2_ar[0]+$t2_ar[1];
echo round($t2-$t, 4);
?>
Но почему, почему вы не читаете доки?!
Код можно немного упростить так:
<?php
$t=microtime();
$t=array_sum(explode(' ', $t));
?>
1) Есть функция array_sum, которая суммирует числа в массиве.
2) Зачем использовать лишнюю функцию chr, если можно просто использовать ' ' - то есть пробел.
Вы думаете, это всё? Увы, нет. Если бы вы опять же читали доки, то знали бы, что в php 5 появился дополнительный параметр, который ЗНАЧИТЕЛЬНО упрощает весь существующий код к этому:
<?php
$t=microtime(1);
//Скрипт, а в конце
echo round(microtime(1)-$t, 4);
?>
Вот и все. Если передать параметр true функции microtime(чем является единица), то будет передан уже готовый отформатированный вид, а не как раньше (целая часть и через пробел - дробная).
Удивляет то, что я постоянно вижу этот код, особенно а скриптах, которые используют ООП PHP 5(то есть, исключая то, что код будет запускаться под умершим PHP 4, в котором подобное поведение имело смысл).

P.S. Обожаю один странный глюк microtime. Иногда если запускать этот скрипт часто под Windows, выскакивает либо 0, либо... ОТРИЦАТЕЛЬНОЕ ЧИСЛО! То есть, по логике вещей, скрипт работает меньше мгновения, либо скрипт запускается с конца наперёд. Чем вызвано это поведение - так и осталось загадкой, интересно, а вы видели отрицательное время генерации в вашем скрипте?

Комментариев нет:

Отправить комментарий