Правильное использование microtime - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сравнить две функции, используя microtime().

Однако я получаю неожиданные результаты.

Согласно моему пониманию этого поста SO ( Отслеживаниевремя выполнения сценария в 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-6сек

1

9.5367431640625E-7sec

Страница загружается менее чем за секунду - так почему 9.XYZ вызывает у меня некоторое замешательство.

Правильно ли я использую microtime()?Дополнительный вопрос: как узнать, какая функция самая быстрая?Принятый ответ в связанном вопросе вывел 0 мс для обеих функций.

edit

Я изменил свой скрипт на:

<?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 секунд - второй результат выглядит правильно, но я не уверен насчет первого ...

1 Ответ

0 голосов
/ 19 октября 2018

Вы не правильно читаете результаты.Это « научная запись », которая используется для выражения значений, которые либо слишком малы, либо слишком велики для удобной обработки.

7.1048736572266E-5 секунд эквивалентно 0.000071048736572266 секундам.

Итак, вы правы, ваш тест занимает значительно меньше времени, чем 7 секунд.

...