Измерить скорость скрипта на 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”
Оставить комментарий
Full Stack
Senior, Architect
предложить оффер
- jQuery: как получить значение атрибута?
- PHP работа с изображением, класс SimpleImage
- Интеграция с API ОСАГО сайта sravni.ru
- Комментарии на PHP, Ajax, mySQL
- PHP: Категории бесконечного уровня вложенности.
- Nginx редирект на другой сервис с сохранением URL спросил (а) Сергей
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Обзор Insurance CMS — платформы для сайтов по страхованию к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Консольный скрипт(JavaScript) для автоматических заказов на OZON к записи
- Как создать Telegram-бота с авторизацией через сайт к записи
- PHP скрипт: каталог закладок на сайты к записи
- Валидация на PHP к записи
- Сколько зарабатывают в бизнесе на совместных покупках к записи
Archive
- +2025 (24)
- Апрель 2025 (5)
- Март 2025 (4)
- Февраль 2025 (9)
- Январь 2025 (6)
- +2024 (35)
- Декабрь 2024 (7)
- Ноябрь 2024 (13)
- Октябрь 2024 (8)
- Сентябрь 2024 (1)
- Август 2024 (5)
- Май 2024 (1)
- +2023 (27)
- Ноябрь 2023 (1)
- Октябрь 2023 (13)
- Сентябрь 2023 (10)
- Апрель 2023 (1)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +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 (36)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Февраль 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 (41)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (7)
- Февраль 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)
Свежие записи
- Проверка CORS онлайн 04.04.2025
- Декодер JWT онлайн 03.04.2025
- Конвертер RGB в HEX (и обратно) онлайн 02.04.2025
- Конвертер Markdown в HTML онлайн 02.04.2025
- Создание сертификата Let’s Encrypt для домена и всех поддоменов 01.04.2025
А если нузно таймер остановить ??? т.е. пропустить какой-то участок кода ???
Диллема ))) … и по моему мнению лучше делать класс который будет полностью автоматичесский, чтобы было примерно так- 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,’ сек.’;