Если знать время выполнения скрипта, то можно добиваться его максимального быстродействия. Тем самым мы сегодня немного затронем тему оптимизации.
Я решил начать с определения времени. И в дальнейшем буду использовать этот приём, чтобы узнать, в какую сторону повлияло изменение кода на быстродействие скрипта.
Чтобы это реализовать, надо определить время перед началом выполнения скрипта и в конце выполнения.
Я нашёл функцию microtime(), которая возвращает кол-во секунд, прошедших с 1 января 1970 года. Причём результат достаётся в виде дробной и целой части. Если мы хотим отделить эти значения друг от друга, то надо воспользоваться функцией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
Расчёт времени я выделил в отдельную функцию. Как видите 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;
}
Как видите все предельно просто.