Измерить скорость скрипта на PHP
Каждый вебмастер после создания сайта начинает задумываться о его доработке, добавляя разные готовые модули, плагины или же самописные расширения. И вот тут встает вопрос об оптимизации работы всей системы и в частности к скриптам на PHP, так как по мере усовершенствования сайта растет потребность к ресурсам сервера.
На помощь в написании оптимизированных собственных дополнений вам пригодиться небольшой PHP класс измерения времени выполнения скрипта, найденный мною на просторах интернета.
Для удобства назовем его: timer.class.php
<?php // Измерение времени выполнения скрипта // найденно на просторах всемирной паутины set_time_limit(0); class timer { private $start_time; private function get_time() { list($usec, $seconds) = explode(" ", microtime()); return ((float)$usec + (float)$seconds); } function start_timer() { $this->start_time = $this->get_time(); } function end_timer() { return ($this->get_time() - $this->start_time); } } ?> |
Как мы видим в этом классе используется три метода, все достаточно просто. Первый метода get_time возвращает текущее время, метода start_timer сохраняет текущее время в переменную $start_time, и наконец третий метод все это дело подсчитывает и возвращает нам разницы между текущим и сохраненным нами временем. Таким образом вычисляется время выполнения скрипта.
Перейдем непосредственно к самому примеру и посмотрим на деле, как же работает наш класс. Для теста мы возьмем операторы условий и запишем их в разном формате, хоть и задачу они преследуют одну.
Первый вариант:
if (isset($str{5})) {}
Второй вариант:
if (strlen($str) > 5) {}
Для проверки на скорость этих двух вариантов записи напишем следующий код:
<?php include("../../lib/timer.class.php"); $timer = new timer(); $str="привет мир"; //--------------------- $timer->start_timer(); //--------------------- for($i=0; $i<10000; $i++) { if (isset($str{5})) {} } //---------------------- $firstTime = $timer->end_timer(); //---------------------- echo('Код "if (isset($str{5})) {}" работал '.$firstTime.'с.<br />'); //--------------------- $timer->start_timer(); //--------------------- for($i=0; $i<10000; $i++) { if (strlen($str) > 5) {} } //---------------------- $secondTime = $timer->end_timer(); //---------------------- echo('Код "if (strlen($str) > 5) {}" работал '.$secondTime.'с.<br />'); ?> |
После выполнения вышеописанного скрипта мы увидим результат, время выполнения двух разных вариантов записи оператора условий
Код «if (isset($str{5})) {}» работал 0.0011839866638184с.
Код «if (strlen($str) > 5) {}» работал 0.0032460689544678с.
Из этого видно, что первый вариант работает примерно в три раза быстрее. в скрипте используется цикл с количеством итераций (оборотов) 10 000, это сделано для того, чтобы видеть разницу в более наглядном примере.
Таким образом любой вебмастер он же программист может при написании кода использовать этот класс и оптимизировать свои скрипты, что положительно будет сказываться на работе всего сайта целиком. А так же приучит использовать правильно построенные запросы, сравнения и вычисления.
Не отходя от темы, хочу упомянуть недавнее обсуждение статьи, опубликованной на Joomlaperformance, в которой как раз писалось об оптимизации и о скорости выполнения тех или иных вариантов написания кода. и к всеобщему удивлению была выявлена разница в описанных мною примерах кода, а именно, разница на 146% между «if (isset($str{5})) {}"
и «if (strlen($str) > 5) {}
».
Благодарю за внимание, учитесь писать правильный код.
Похожие записи
5 комментариев to “Измерить скорость скрипта на PHP”
Оставить комментарий на Тарас
- Перенести ли домены с Рег.ру на Бегет? спросил (а) Виктор
- RuCaptcha bot и бан по IP спросил (а) Родмик
- MySQL запрос с несколькими JOIN спросил (а) Александр
- MySQL выбрать данные из двух таблиц спросил (а) Виталий
- Редирект при переносе сайта на WordPress спросил (а) Николай
- Анализ рынка Совместных покупок к записи
- Переустановка Apache к записи
- Интеграция сайта со СДЭК по API к записи
- Интеграция сайта со СДЭК по API к записи
- PHP. Кириллица в регулярных выражениях к записи
- Скрипт постраничной навигации (расширенная версия) к записи
- Прогон сайта по профилям, стоит ли? к записи
Archive
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (37)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Март 2016 (1)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (42)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (8)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Регистрация программы для ЭВМ или базы данных в Роспатенте 27.12.2020
- Парсер для форума XenForo 22.12.2020
- Интеграция Тинькофф банк Эквайринг на сайт для приема платежей 18.12.2020
- PHP скрипт для проведения акций с призами на сайте(автоматизированный маркетинг) 16.12.2020
- Скрипт калькулятора емкости HDD для видеонаблюдения 03.12.2020


А если нузно таймер остановить ??? т.е. пропустить какой-то участок кода ???
Диллема ))) … и по моему мнению лучше делать класс который будет полностью автоматичесский, чтобы было примерно так- new timer(и оно выводит на экран время)
У меня по этой шеме работает класс кэширования сайта(в flat файлы). т.е. нужно только инициализировать класс (использует register_shutdown_function() )
Остановка таймера это уже отдельный вопрос, можно разумеется реализовывать данную возможность уже в виде отдельного класса.
Выложенный Вами класс не работает. В отличии от идентичного с другого сайта. Причина в строчке return ($this->get_time() – $this->start_time);
Вместо минуса у Вас стоит тире.
Спасибо за замечание, проблема крылась в парсере вордпресса. Поменял плагин подсветки кода, а также немного переписал функцию выводя текста поста. Надеюсь в дальнейшем не будет проблем с отображением и выводом…
Добавьте что это актуально для PHP ниже 5 версии.
Для php5>
функцию function get_time() можно просто заменить на microtime(true);
ИМХО так быстрее сделать замер
$StartTime=microtime(true);
/*
*Замеряемый кусок кода
*/
$StartTime=microtime(true)-$StartTime;
echo ‘Что то там отработало за’, $StartTime,’ сек.’;