Измерить скорость скрипта на PHP

Author Роман Чернышов    Category PHP     Tags , , Комментариев 5 Дата 17 Окт

phpspeed Измерить скорость скрипта на 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-&gt;start_time = $this-&gt;get_time();
}
 
function end_timer()
{
return ($this-&gt;get_time() - $this-&gt;start_time);
}
}
?&gt;

Как мы видим в этом классе используется три метода, все достаточно просто. Первый метода get_time возвращает текущее время, метода start_timer сохраняет текущее время в переменную $start_time, и наконец третий метод все это дело подсчитывает и возвращает нам разницы между текущим и сохраненным нами временем. Таким образом вычисляется время выполнения скрипта.

Перейдем непосредственно к самому примеру и посмотрим на деле, как же работает наш класс. Для теста мы возьмем операторы условий и запишем их в разном формате, хоть и задачу они преследуют одну.

Первый вариант:

if (isset($str{5})) {}

Второй вариант:

if (strlen($str) &gt; 5) {}

Для проверки на скорость этих двух вариантов записи напишем следующий код:

&lt;?php
include("../../lib/timer.class.php");
 
$timer = new timer();
$str="привет мир";
 
//---------------------
$timer-&gt;start_timer();
//---------------------
 
for($i=0;  $i&lt;10000;  $i++)
{
if (isset($str{5})) {}
}
//----------------------
$firstTime = $timer-&gt;end_timer();
//----------------------
 
echo('Код "if (isset($str{5})) {}" работал '.$firstTime.'с.&lt;br /&gt;');
 
//---------------------
$timer-&gt;start_timer();
//---------------------
 
for($i=0;  $i&lt;10000;  $i++)
{
if (strlen($str) &gt; 5) {}
}
 
//----------------------
$secondTime = $timer-&gt;end_timer();
//----------------------
 
echo('Код "if (strlen($str) &gt; 5) {}" работал '.$secondTime.'с.&lt;br /&gt;');
?&gt;

После выполнения вышеописанного скрипта мы увидим результат, время выполнения двух разных вариантов записи оператора условий

Код «if (isset($str{5})) {}» работал 0.0011839866638184с.
Код «if (strlen($str) > 5) {}» работал 0.0032460689544678с.

Из этого видно, что первый вариант работает примерно в три раза быстрее. в скрипте используется цикл с количеством итераций (оборотов) 10 000, это сделано для того, чтобы видеть разницу в более наглядном примере.

Таким образом любой вебмастер он же программист может при написании кода использовать этот класс и оптимизировать свои скрипты, что положительно будет сказываться на работе всего сайта целиком. А так же приучит использовать правильно построенные запросы, сравнения и вычисления.

Не отходя от темы, хочу упомянуть недавнее обсуждение статьи, опубликованной на Joomlaperformance, в которой как раз писалось об оптимизации и о скорости выполнения тех или иных вариантов написания кода. и к всеобщему удивлению была выявлена разница в описанных мною примерах кода, а именно, разница на 146% между  «if (isset($str{5})) {}" и «if (strlen($str) &gt; 5) {}».

Благодарю за внимание, учитесь писать правильный код.

5 комментариев to “Измерить скорость скрипта на PHP”

  • AlexanderC 09.05.2011 в 7:44 пп

    А если нузно таймер остановить ??? т.е. пропустить какой-то участок кода ???
    Диллема ))) … и по моему мнению лучше делать класс который будет полностью автоматичесский, чтобы было примерно так- new timer(и оно выводит на экран время)
    У меня по этой шеме работает класс кэширования сайта(в flat файлы). т.е. нужно только инициализировать класс (использует register_shutdown_function() )

  • Роман Чернышов 10.05.2011 в 12:26 дп

    Остановка таймера это уже отдельный вопрос, можно разумеется реализовывать данную возможность уже в виде отдельного класса.

  • Тарас 18.05.2011 в 11:51 пп

    Выложенный Вами класс не работает. В отличии от идентичного с другого сайта. Причина в строчке return ($this->get_time() – $this->start_time);
    Вместо минуса у Вас стоит тире.

    • Роман Чернышов 19.05.2011 в 2:26 дп

      Спасибо за замечание, проблема крылась в парсере вордпресса. Поменял плагин подсветки кода, а также немного переписал функцию выводя текста поста. Надеюсь в дальнейшем не будет проблем с отображением и выводом…

  • Gor 07.06.2011 в 10:45 пп

    Добавьте что это актуально для PHP ниже 5 версии.
    Для php5>
    функцию function get_time() можно просто заменить на microtime(true);
    ИМХО так быстрее сделать замер
    $StartTime=microtime(true);
    /*
    *Замеряемый кусок кода
    */
    $StartTime=microtime(true)-$StartTime;
    echo ‘Что то там отработало за’, $StartTime,’ сек.’;

Оставить комментарий

О блоге и авторе

Добро пожаловать на блог веб-разработчика! На протяжении многих лет, начиная с 2009 года, я занимаюсь созданием специализированных сайтов, сервисов и крупных веб-порталов. Мною было создано несколько сотен сайтов, большинство из которых работают на ПО созданном под заказ, а также на готовом ПО которое я разрабатываю на протяжении всего периода моей деятельности. Это: CMS "Совместные покупки", CMS "osRealty", CMS "Спорт прогнозы" и многое другое.

На страницах моего блога вы найдете множество информации о программировании, о появлении новых разработок, сможете ознакомиться с товарами и услугами которые я предоставляю. А также сможете получить консультацию, заказать разработку сайта или приобрести готовое решение, для реализации собственного проекта.

Поиск по блогу
Категории
Архив
Новое на сайте
Блогеры пишут
  • Роман Чернышов: Для работы капчи на PHP 5.6, замените в файле class.captcha.php строку 264 $ifunc( $this -> i [...]
  • Роман Чернышов: Схема такая: 1) На сайте есть виртуальные кошельки (далее ВК) 2) При пополнении пользователем ВК, [...]
  • Александр: Может скрипт комментариев блокирует сообщения с кодом? Или как длинный текст не проходит?
  • Александр: Пытаюсь в который раз здесь показать код, но страница обновляется, и не сообщения, ни любого оповеще [...]
  • Роман Чернышов: Лично у меня интерес к продаже ссылок пропал уже давно. Преимущество сапы, это то - что ссылки можно [...]
Портфолио Все работы


www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...