Я пытаюсь сравнить две функции, используя microtime()
,
Однако я получаю неожиданные результаты.
Согласно моему пониманию этого поста ТАК (Отслеживание времени выполнения скрипта в PHP) Я должен быть в состоянии вычесть $before
от $after
чтобы получить мое время выполнения в секундах.
Я изложил свой сценарий так:
<?php
$int = 4;
$before = microtime(true);
print_r(filter_var($int, FILTER_VALIDATE_INT));
echo '<br />';
$after = microtime(true);
echo ($after - $before). 'sec' ."\n";
echo '<br />';
$int = 4;
$before = microtime(true);
print_r(is_int($int));
echo '<br />';
$after = microtime(true);
echo ($after - $before) .'sec' ."\n";
Я знаю, что это не точная итерация времени выполнения, поскольку она не зацикливает функцию X раз, чтобы получить среднее значение — сначала просто выполняется базовый тест, поэтому, пожалуйста, игнорируйте этот аспект.
Когда я захожу на эту страницу в своем браузере, я получаю такой вывод:
4
9.0599060058594E-6sec
1
9.5367431640625E-7sec
Страница загружается менее чем за секунду — так почему 9.XYZ
появляется меня немного смущает.
Я использую microtime()
правильно? Дополнительный вопрос: как узнать, какая функция самая быстрая? Принятый ответ в связанном вопросе вывел 0 мс для обеих функций.
редактировать
Я изменил свой скрипт на это:
<?php
function checkInt($int)
{
return is_int($int);
}
function checkIntFilter($int)
{
return filter_var($int, FILTER_VALIDATE_INT);
}
$before = microtime(true);
for ($i = 1; $i < 1000; $i++)
{
checkInt(4);
}
$after = microtime(true);
echo ($after - $before). ' sec' .'<br />';
$before = microtime(true);
for ($i = 1; $i < 1000; $i++)
{
checkIntFilter(4);
}
$after = microtime(true);
echo ($after - $before). ' sec';
который теперь выводит:
7.1048736572266E-5 сек
0,00024008750915527 с
однако моя страница определенно загружается менее чем за 7 секунд — второй результат выглядит правильно, но я не уверен насчет первого …
Вы не правильно читаете результаты. Это «научная нотация«, который используется для выражения значений, которые либо слишком малы, либо слишком велики для удобной обработки.
7.1048736572266E-5
секунды эквивалентны 0.000071048736572266
секунд.
Таким образом, вы правы, ваш тест занимает значительно меньше времени, чем 7 секунд.
Других решений пока нет …