Как определить быстродействие скрипта

Я уже несколько месяцев серьезно занимаюсь изучением php. И теперь стараюсь сделать так, чтобы скрипт не только работал правильно, но и быстро, так как время работы скрипта - существенный параметр. Вы ведь не хотите, чтобы пользователь долго ждал? Если знать время выполнения скрипта, то можно добиваться его максимального быстродействия. Тем самым мы сегодня немного затронем тему оптимизации.

Я решил начать с определения времени. И в дальнейшем буду использовать этот приём, чтобы узнать, в какую сторону повлияло изменение кода на быстродействие скрипта.

Чтобы это реализовать, надо определить время перед началом выполнения скрипта и в конце выполнения.

Я нашёл функцию microtime(), которая возвращает кол-во секунд, прошедших с 1 января года. Причём результат достаётся в виде дробной и целой части. Если мы хотим отделить эти значения друг от друга, то надо воспользоваться функцией explode().

Тем самым мы разделим строку на части, которые вернутся в виде массива.

Для примера я написал простенький скрипт заполнения таблицы бд.

index.php

<?php

error_reporting(0);
include ‘connect.php’;
include ‘funcs.php’;

$q=0;
$min=0;
   
while($q<10) {
       
    $q++;
    $i=0;
       
    $clear_table = "TRUNCATE TABLE `time`";
    mysql_query($clear_table) or die("не удалось очистить таблицу (".mysql_error().")");
       
    $start_time = ftime();

    while($i<30000) {
       
        $i++;
        $sql2 = "INSERT INTO `time` VALUES(NULL,'$i')";
        mysql_query($sql2) or die("не удалось добавить данные в бд (".mysql_error().")");
    }
   
$end = ftime();
    $result = $end - $start_time;
    echo "<BR>".$q."-ая попытка: ".$result;
      if ($q == 1 || $result < $min) {
          $min = $result;
      }

}
echo "<BR><BR> минимальное кол-во времени: ".$min;

?>

connect.php

<?php
$sqlhost="localhost";
$sqluser="root";
$sqlpass="";
$db="time";
mysql_connect($sqlhost,$sqluser,$sqlpass) or die("не удалось соединиться ".mysql_error().")");
mysql_select_db($db) or die("не удалось выбрать бд(".mysql_error().")");
?>

funcs.php

<?php
function ftime()
{
    $timem = explode(' ',microtime());
    $res = $timem [0]+$timem [1];
    return $res;
}
?>

Расчёт времени я выделил в отдельную функцию. Как видите explode сохранила два значения в массив, элементы которого я потом просто сложил.

Как видите первый цикл while нужен, чтобы прогнать код, который нам интересен 10 раз. Так как каждый раз время отличается и нам необходимо минимальное значение. Почему минимальное? Потому что система в момент минимального времени была наименее загружена, а значит это время наиболее правдоподобно. А вообще можно было бы взять больше итераций - например, не 10, а 40. Тогда время было бы еще правдивее.

$begin_time = ftime(); здесь я запоминаю начало работы скрипта.
$end = ftime(); здесь конец работы.

$sql4 = “TRUNCATE TABLE `asd`”; здесь я делаю очистку таблицы, перед каждым новым прогоном скрипта.

$result = $end - $begin_time; потом я просто вычитаю из конечного времени начальное.

и ищу минимальное время всех попыток:
if ($q == 1 || $result < $min) {
$min = $result;
}

Как видите все предельно просто.





Читайте также:



5 Ответов на “Как определить быстродействие скрипта”

  1. Я нашёл функцию microtime(), которая возвращает кол-во секунд, прошедших с 1 января года. Причём результат достаётся в виде дробной и целой части. Если мы хотим отделить эти значения друг от друга, то надо воспользоваться функцией explode().

    function ftime()
    {
    $timem = explode(‘ ‘,microtime());
    $res = $timem [0]+$timem [1];
    return $res;
    }

    ненене) Не нужно таких извращений. Если функции microtime() передать аргумент TRUE, то она сразу вернет веремя в виде числа (секунды с милисекундами)
    microtime(true)

    И тогда не нужна никакая function ftime()

    $start_time = microtime(true);
    … бла-бла
    $end_time = microtime(true);

  2. novice

    Правильно. Только это справедливо для версии PHP5. Для версии PHP4 придется использовать ftime. Читаем документацию.

  3. дейсвтительно так. просто я изначально на PHP5 пишу

  4. Спасибо! Хорошая статья.
    Ещё бы узнать по возможности, сколько ресурсов памяти использует скрипт, было бы совсем замечательно…

  5. Хорошая статья. Есть кстати простой способ на [ссылка]


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map