Это статья написана для тех кто только начал изучать PHP. Здесь будет рассказано, как профилировать свой код или если сказать по русски, как измерить скорость его работы.
Задача - нужно перед началом работы кода поставить временную метку, и после окончания поставить временную метку. Посчитать разницу между конечной и начальной точкой отсчета и вывести результат.
Поехали
Для этого мы будем использовать функцию microtime()
<?php echo microtime(); // Выведет что то наподобие этого - 0.48441300 1212042171 ?>
По умолчанию эта функция выводит строку "микросекунды секунды". Для нашего измерения нам нужно поменять их местами, чтобы было "секунды.микросекунды". И сделать наш код универсальным для простого и приятного дальнейшего использования.
Для этого сделаем класс с двумя методами start и finish, как не трудно догадаться это будет начальное и конечное наше измерение, причем метод finish будет показывать нам уже готовый результат.
<?php // Создаем наш класс class Speed { // Создаем два свойства нашего класса static private $st; static private $fin; // Создаем метод, который ставит начальную точку и переводит ее к виду "сек.микросек" static public function start(){ $start_arr = explode(' ', microtime()); self::$st = $start_arr[1].substr($start_arr[0], 1); return self::$st; } // Создаем метод, который подсчитывает сколько прошло времени static public function finish(){ $finish_arr = explode(' ', microtime()); self::$fin = bcsub(($finish_arr[1].substr($finish_arr[0], 1)), self::$st, 6); return self::$fin; }
}
?>
Описание кода:
$st - начальная точка отсчета
$fin - конечная точка отсчета
static - позволяет нам обращаться к членам класса без объявления объекта, используя
оператор разрешения области видимости ::
Если член класс объявляется static то обращаться к нему через префикс $this-> нельзя
private - спецификатор доступа, который показывает что обращаться к члену класса можно
только внутри класса. Для вывода этого свойства, так как оно private, будет отвечать метод класса.
public - спецификатор доступа, который показывает что обращаться к члену класса можно вне класса, т.е любой созданный объект может обращаться к этому методу или свойству( public стоит по умолчанию и если написать просто function start() - она будет public)
self:: - обращение к статическому члену класса
microtime(), explode(), substr(), bcsub() - читайте здесь www.php.su
Как использовать:
Сохраняем под любым именем например speed.php
<?php include_once('speed.php'); Speed::start();
// Ваш код
echo ' '.Speed::finish(); ?>
Теперь вы сможете узнать что быстрее for или foreach, а может быть while. Где лучше объявлять переменную вне цикла или внутри. Кто быстрее регулярные выражения или просто строковые функции PHP и т.д.
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
Kiar25
Это статья написана для тех кто только начал изучать PHP. Здесь будет рассказано, как профилировать свой код или если сказать по русски, как измерить скорость его работы.
Задача - нужно перед началом работы кода поставить временную метку, и после окончания поставить временную метку. Посчитать разницу между конечной и начальной точкой отсчета и вывести результат.
Поехали
Для этого мы будем использовать функцию microtime()
По умолчанию эта функция выводит строку "микросекунды секунды". Для нашего измерения нам нужно поменять их местами, чтобы было "секунды.микросекунды". И сделать наш код универсальным для простого и приятного дальнейшего использования.
Для этого сделаем класс с двумя методами start и finish, как не трудно догадаться это будет начальное и конечное наше измерение, причем метод finish будет показывать нам уже готовый результат.
Описание кода:
$st - начальная точка отсчета
$fin - конечная точка отсчета
static - позволяет нам обращаться к членам класса без объявления объекта, используя
оператор разрешения области видимости ::
Если член класс объявляется static то обращаться к нему через префикс $this-> нельзя
private - спецификатор доступа, который показывает что обращаться к члену класса можно
только внутри класса. Для вывода этого свойства, так как оно private, будет отвечать метод класса.
public - спецификатор доступа, который показывает что обращаться к члену класса можно вне класса, т.е любой созданный объект может обращаться к этому методу или свойству( public стоит по умолчанию и если написать просто function start() - она будет public)
self:: - обращение к статическому члену класса
microtime(), explode(), substr(), bcsub() - читайте здесь www.php.su
Как использовать:
Сохраняем под любым именем например speed.php
Теперь вы сможете узнать что быстрее for или foreach, а может быть while. Где лучше объявлять переменную вне цикла или внутри. Кто быстрее регулярные выражения или просто строковые функции PHP и т.д.
Экспериментируйте
Link to comment
Share on other sites
12 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.