php узнать время выполнения скрипта
Как измерить время работы скрипта на php и для чего это нужно?
Приветствую Вас, уважаемые читатели блога webcodius! Итак, сразу к делу. Сначала отвечу на вторую часть вопроса: зачем же может понадобиться измерить время выполнения скрипта?.При работе над отладкой веб-проектов важным фактором, который следует обязательно учитывать, является время выполнения скриптов. Этот параметр необходим чтобы понять насколько быстро и производительно работает тот или иной кусок кода. Определив время потраченное сервером на выполнение php скрипта, вы сможете сделать вывод: требуется ли оптимизация кода или нет. Далее рассмотрим как это сделать.
Для анализа производительности php-скриптов существуют различные расширения и библиотеки, например XDebug, которое может выполнять отладку скриптов и профилировать их по времени выполнения. Но для использования таких расширений требуется потратить время на их установку и настройку. Конечно для оптимизации работы крупных проектов со соложной архитектурой, большим количеством скриптов и миллионами строк кода лучше воспользоваться такими расширениями. Но если необходимо оптимизировать 3-4 скрипта с одной или двумя сотнями строк кода, то для измерения времени работы скрипта можно воспользоваться только средствами php.
Как в php определить время выполнения скрипта
Если запустить скрипт, то результат будет примерно таким:
Время выполнения скрипта: 0,00059400000000001
Теперь зная как определить в php время выполнения скрипта, вы можете приступать к оптимизации различных блоков кода. Желаю удачи и до встречи в следующих постах!
Определяем время работы скрипта PHP
Доброго времени суток, коллеги! 🙂
Сегодня я решил затронуть такую тему, как время выполнения скрипта PHP и его определение.
Не скажу, что данная необходимость возникает каждый день, но время от времени на практике возникают ситуации, когда нужно получить время работы скрипта PHP.
Особенно часто за таким занятием можно застукать разработчиков, занимающихся рефакторингом кода и оптимизацией существующих алгоритмов, когда время выполнения PHP скрипта является ключевым фактором при выборе конечного варианта.
Ну, и ещё иногда данные цифры требуют менеджеры и заказчики, желающие выяснить, сколько времени потребуется на то или иное действие в коде.
Поэтому я и решил написать данную коротенькую заметку, в которой решил изложить порядок действий в аналогичной ситуации.
Сперва мы рассмотрим сам алгоритм определения времени исполнения PHP скрипта, а затем я приведу код, с помощью которого он будет реализовываться.
Время выполнения PHP скрипта — алгоритм определения
Порядок наших действий будет предельно прост:
Полученное в итоге значение как раз и будет временем выполнения PHP скрипта, которое можно будет принимать во внимание при дальнейшей оптимизации и прочих действиях.
Время работы PHP скрипта — реализация алгоритма
Для вывода текущего времени в PHP коде я решил воспользоваться стандартной PHP функцией microtime(), которая возвращает текущую метку времени в Unix формате с микросекундами.
Зачем такая точность?
Затем, чтобы уловить малейшие изменения времени выполнения скриптов, т.к. иногда доли секунды могут быть фатальны и привести к большим потерям при использовании медленного кода в больших масштабах.
Ну, и плюс, учёт микросекунд при вычислениях влияет на точность калькуляций в положительную сторону.
Для демонстрации своих теоретических повествований я написал простенький скриптик, который вычисляет время прогона пустого цикла с 30 000 000 итераций (решил взять побольше для наглядности):
Как сказано в официальной документации PHP, по умолчанию microtime() возвращает строку в формате «msec sec», где sec — количество секунд с начала эпохи Unix (1 января 1970 0:00:00 GMT), а msec — это количество микросекунд, прошедших после sec.
Функция PHP microtime() имеет всего один параметр get_as_float, при указании которому значения true можно получить текущее время PHP в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.
Поскольку мне нужно было именно текущее время, а не количество секунд с начала эпохи Unix, то я воспользовался данным параметром, что можно видеть в моём коде.
В итоге, с помощью функции echo(), на экран вывелось следующее сообщение: Скрипт был выполнен за 1.3156361579895 секунд.
Чтобы определить, что данная методика работает верно, я решил задать фиксированное время выполнения скрипта с помощью функции sleep(), которая делает задержку выполнения скрипта на указанное количество секунд.
В итоге, следующая конструкция вернула сообщение Скрипт был выполнен за 2.0000510215759 секунд:
Превышение указанной задержки на микроскопические доли секунд можно списать на время вызова кодовых конструкций и обработку результатов их выполнения серверным железом, поэтому на них вполне можно закрыть глаза.
Если они будут всё-таки раздражать вас или вашего заказчика, то можете воспользоваться хаком в виде банального округления до сотых или тысячных долей с помощью PHP функции round(), задействовав её следующим образом:
Результатом выполнения данного куска кода для вышеприведённого примера станет значение в кругленькие 2 секунды, что устроит самых искушённых перфекционистов 🙂
На этом сегодняшняя информация о том, как можно определить время выполнения скрипта PHP, подходит к концу.
Пишите свои отзывы в комментариях и задавайте интересующие вас вопросы в пабликах проекта в социальных сетях.
Всем удачи и до новых встреч! 🙂
P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.
Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.
Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.
И с друзьями не забудьте поделиться 😉
Время выполнения скрипта php и php-функций
Сегодня узнаем, как измерять время выполнения скрипта php и отдельных php-функций.
Время выполнения скрипта php
function getMicrotime() <
return microtime(true);
>
$start = getMicrotime();
//Здесь выполняется какой-то код приложения
.
printf(‘Время работы скрипта %.4F сек.’, getMicrotime()-$start);
Время выполнения php-функций
Время выполнения array_key_exists() + switch() + if else()
$arField)
<
if(array_key_exists(‘id’,$arField))
$result = true;
elseif(array_key_exists(‘available’,$arField))
$result = true;
elseif(array_key_exists(‘url’,$arField))
$result = true;
elseif(array_key_exists(‘price’,$arField))
$result = true;
elseif(array_key_exists(‘oldprice’,$arField))
$result = true;
>
>
printf(‘array_key_exists = %.4F сек.
‘, getMicrotime()-$start);
if($key == ‘available’)
$result = true;
if($key == ‘url’)
$result = true;
if($key == ‘price’)
$result = true;
if($key == ‘oldprice’)
$result = true;
>
>
printf(‘if else (1) = %.4F сек.
‘, getMicrotime()-$start);
Очень полезно знать, часто встречающиеся ситуации, условие if else(2) самое быстрое.
Время выполнения str_ireplace() + preg_replace()
Результат
Заключение
Как видим, все надо проверять на деле, иначе приложение по нашей глупости или банальной лени может оказаться таким медленным, съедать у сервера всю память и нагружать процессор до красного каления.
Как узнать время выполнения скрипта
При отладке скриптов обязательным фактором, который необходимо учитывать в первую очередь, является время выполнения скрипта. И в этой небольшой статье я покажу очень хороший и простой способ, как узнать время выполнения скрипта.
В основе лежат функции для работы с датой и временем. Предлагаю рассмотреть пример, чтобы Вы поняли, как происходит подсчёт времени выполнения скрипта:
В результате мы увидим, что время выполнения скрипта будет, например, таким: «0.014652967453«. Если округлить, то это 0.015 секунды. Это и есть время выполнения скрипта.
Теперь о том, как это работает. Функция microtime() с переданным значением true возвращает число секунд, прошедших с полуночи 01.01.1970, причём это значение подсчитано до сотых долей секунды.
Далее идёт обычный скрипт, который мы и проверяем. Вместо него, безусловно, будет Ваш скрипт. И, наконец, последней строкой идёт разница между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта. Разница времени после выполнения скрипта и времени до начала его работы, и есть время выполнения скрипта.
Думаю, здесь всё просто. А вот применять этот способ подсчёта времени я Вам настоятельно рекомендую. Например, когда я отлаживал работу своего движка, на котором и стоит данный сайт, я ускорил его работу почти в 2 раза.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 20 ):
Михаил, а ваш сайт какое время выполнения скрипта имеет?
18-24 мс в зависимости от страницы.
Ого. Я сделал форум, он у меня выполняется 2-3 секунды. Как можно ускорить? Какие операции занимают больше всего времени?
Хорошая эта штуковина с измерением времени. Оказалось у меня время подключения к БД примерно 1.0148439407349 секунд. Интересно из-за чего это? Из-за СУБД?
Надо тестировать и смотреть, какая строка кода занимает больше всего времени.
Михаил,я вот делаю сайт и в меня там все из базы данных вытаскиваеться,меню,текст,комментарии,и многое,и 2 раза подключаються файлы на каждой странице и вот время выполнение 0.12234306335449 скажите ето сколько милисекунд и ето плохая скорость, или быстрая. Спасибо заранее.
что за переменная sum?
Это просто пример суммирования.
Мне вот тоже интересно узнать. Время выполнения движка на страницу колеблется от 14 до 20 мсек. Это нормально? При условии, что тестирую движок со всеми свистелками на денвере (на своем пк). И как это скажется, если я, допустим, поставлю этот движок на свой сайт в инете, где посещаемость 2000+ в день? Очень заинтересовался вопросом оптимизации, и мучает много вопросов по этой теме, в основном по поводу быстродействия движка, при N-посещаемости на сайте.
Александр, это хороший результат, для домашнего ПК. Сложно сказать как будет вести себя сайт, надо тестировать под нагрузкой.
Спасибо, Александр, успокоили на первое время 🙂
Можете подсказать самый простой но практичный способ добавления статей на сайт?чтобы не вручную html писать каждый раз а прямо на сайте написать статью и нажать кнопку добавить и она появилась в разделе нужном.расскажите о принципах.полностью код писать не нужно. спасибо!
Здравствуйте. Все не так просто как хотелось бы. Тут одним HTML не обойтись. Используется связка php+mySQL. Элементарно сделать, это можно путем добавления текста, который введен в форму в БД, а с БД выводить уже.
понял.спасибо.буду разбираться сам ))) а можете еще ответить на мой вопрос на странице http://myrusakov.ru/podkluchenie-file-php.html спасибо
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Инструмент анализа скорости PHP-функций
В последнее время обращал внимание на материалы о производительности и замерах скорости функций PHP. После анализа ряда материалов был сделан следующий вывод. Сравнений довольно много, но все замеры проводятся с разными входными условиями, вывод результатов тестирования у каждого решения свой, не говоря уже о том, если появится желание проверить тесты в своей среде, то придется копипастить куски кода.
Поэтому возникла идея написать собственный механизм простого тестирования скорости различных операций. Задумка показалась интересной, поэтому начало было положено!
Начать следовало с постановки целей будущего инструмента. Проект хотелось видеть как универсальный инструмент для тестирования скорости чего угодно. Но поразмыслив над деталями и ошибками прошлого, решено было начать с малого.
Итак, требовалось получить инструмент, который:
Механизм замеров
Для замера времени выполнения функции было решено воспользоваться подобным, методом
Принцип действия прост, если происходит вызов без параметров, то возвращаем текущее состоянии времени, если же вызов происходит с параметром времени, тогда возвращается разница между текущим и переданным временем.
Но там где расчет времени, там же и потребляемый объем памяти, поэтому в последствии был добавлен аналогичный метод измерения потребляемой памяти.
Механизм аналогичен механике замера времени, только в данном случае происходит передача значения выделенной памяти скрипту.
Как известно, некоторые функции ведут себя по разному в зависимости от входного набора данных, поэтому в каждом тесте определен массив входных данных для функций тестирования. Для получения наиболее точных результатов, тестирование функций проводится на каждом наборе несколько раз. Помимо прочего, тестирование проводится в разной последовательности.
В ходе экспериментов, было замечено, что объем свободной памяти перед началом каждого теста разный, хоть для большинства проводимый испытаний это было незначительным, но для порядка хотелось бы иметь условия одинаковые для всех испытаний либо близкие к таковым. Поэтому хранение результатов было решено реализовать в локальном хранилище SQLite, а перед началом испытаний делать один проверочный тест для заполнения переменных данными.
Для того, чтобы иметь возможность создания собственных вариантов представления результатов и собственных вариантов теста, создано 2 модели абстракции. Модель тестов (Test), содержит всю информацию о тесте, включая функции тестирования. Модель представления данных (DataViwer) содержит методы преобразования результатов тестирования в читаемый вид. Для удобного вывода представлений был задействован шаблонизатор Twig и подключена библиотека стилей bootstrap, также создан вьювер с графиком HighCharts.
В итоге общий механизм работы такой. Берутся необходимые для сравнения функции и запускаются на выполнение с разными наборами данных и в разной последовательности. При этом происходит замер времени каждого выполнения и запись результата в хранилище. За данный этап отвечает модель теста (Test). После всех замеров происходит передача результатов в представление данных (DataViwer), где происходит обработка и вывод информации.
Реализация тестирования
Класс теста
Простой пример реализации класса теста, на примере тестирования скорости выполнения операции пред инкрементирования и пост инкрементирования.
Класс должен наследовать абстрактный класс TestAbstract, в котором заложена основная механика работы с потоками данных.
$name — задает название теста, которое может быть использовано при выводе в DataViewer.
$valueTest — объем выборки тестирования, массив значений, с каждым из которых будет выполнена функция для тестирования. Таким образом каждая тестируемая функция должна обязательно принимать один параметр. Будет он являться числом, строкой или массивом не важно, все зависит от конкретного случая. В нашем примере, достаточно чисел, которые будут обозначать объем проводимых операций с инкрементом.
$qntTest — говорит о том, какое количество раз будет протестирован каждый объем выборки.
$viewers — массив представлений данных, который будет сформирован при рендере отчета. На самом деле это набор полных имен классов наследующих абстрактный класс ViewrAbstract. Заранее подготовленные вьюверы вынесены в константы класса TestCore.
$functions — массив названий функций которые будут использоваться в тестировании. Ключами массива являются названия, которые будут отображены в результатах.
$strategy — массив стратегий тестирования, каждая стратегия должна быть представлена массивом с последовательностью имен функций. В примере указано 2 стратегии — прямой последовательности и в обратной.
Непосредственно сами функции, которые как говорилось выше, должны принимать одно значение. В нашем примере, мы считаем это за количество выполняемых операций серии инкрементирования.
В итоге получим, серию тестов где каждая стратегия тестирования будет протестирована по 5 раз с каждым объемом выборки ([100, 1000, 2000, 3000]).
Класс представления данных
Сейчас давайте подробнее рассмотрим простой класс представления данных.
Класс реализует абстрактный класс ViewerAbstract.
$view — содержит имя представления, которое поумолчанию должно лежать в папке /views/viewers
function generateData($data) — метод обработки массива результатов тестирования. Результат будет передан поумолчанию в параметр data в указанное представление.
function run($data) — необязательный для реализации метод, но если необходимо изменить путь к представлению данных, то именно он должен быть переопределен.
public static function model($class = __CLASS__) — метод поддержки статического обращения к методам
Варианты использования
Чтобы воспользоваться функционалом тестирования, создано 2 основных метода.
Метод запуска теста
$test — полное имя запускаемого теста. Могут быть задействованы как свои варианты тестов либо заранее подготовленные.
$params — массив параметров для запуска теста. Данным параметром можно точечно изменить параметры тестирования.
$onlyData — параметр отвечающий за вывод набора результатов либо отрендеренное представление.
Метод сравнения функций
Метод сравнения пользовательских функций без создания дополнительных классов
$func — массив анонимных функций, где ключи массива являются названиями функций в результатах тестирования.
$params — массив параметров тестирования, аналогичен параметрам метода test.
$onlyData — также аналогичен параметру метода test, и отвечает за вариант вывода результатов.
Примеры работы
Самый простой и быстрый вариант использования — это воспользоваться заранее подготовленным тестом. Все подготовленные тесты вынесены в константы класса Speedy.
Для сравнения пользовательских функций, необходимо создать анонимные функции и вызвать метод Speedy::compare
Результаты тестирования
Результаты тестирования на данный момент могут быть выведены 4мя представлениями.
VIEWER_TLIST
Представление в табличной форме списка всех произведенных замеров времени. По сути это вывод всех записей из хранилища, без каких-либо преобразований. В наборе данных содержится информация о имени тестируемой функции, затраченном времени, объему выборки, используемому объему памяти, номер партии в которой выполнялся тест и комментарий. В комментарии указывается в рамках какой стратегии был выполнен тест данной функции.
Результат тестирования операторов инкрементирования.
name | time | size | memory | part | comment |
postInc | 0.000650882720947 | 100 | 48 | 2 | postInc-prefInc |
prefInc | 0.000411987304688 | 100 | 48 | 2 | postInc-prefInc |
prefInc | 0.000406980514526 | 100 | 48 | 3 | prefInc-postInc |
postInc | 0.000549077987671 | 100 | 48 | 3 | prefInc-postInc |
postInc | 0.000330924987793 | 100 | 48 | 5 | postInc-prefInc |
prefInc | 0.000287055969238 | 100 | 48 | 5 | postInc-prefInc |
prefInc | 0.00043797492981 | 100 | 48 | 6 | prefInc-postInc |
postInc | 0.000365018844604 | 100 | 48 | 6 | prefInc-postInc |
postInc | 0.000295162200928 | 100 | 48 | 8 | postInc-prefInc |
prefInc | 0.000373125076294 | 100 | 48 | 8 | postInc-prefInc |
prefInc | 0.000263929367065 | 100 | 48 | 9 | prefInc-postInc |
postInc | 0.000449895858765 | 100 | 48 | 9 | prefInc-postInc |
postInc | 0.00030517578125 | 100 | 48 | 11 | postInc-prefInc |
prefInc | 0.000247955322266 | 100 | 48 | 11 | postInc-prefInc |
prefInc | 0.000244140625 | 100 | 48 | 12 | prefInc-postInc |
postInc | 0.000265121459961 | 100 | 48 | 12 | prefInc-postInc |
postInc | 0.000267028808594 | 100 | 48 | 14 | postInc-prefInc |
prefInc | 0.000245094299316 | 100 | 48 | 14 | postInc-prefInc |
prefInc | 0.000285148620605 | 100 | 48 | 15 | prefInc-postInc |
postInc | 0.000273942947388 | 100 | 48 | 15 | prefInc-postInc |
postInc | 0.00273203849792 | 1000 | 48 | 17 | postInc-prefInc |
prefInc | 0.00240206718445 | 1000 | 48 | 17 | postInc-prefInc |
prefInc | 0.00274896621704 | 1000 | 48 | 18 | prefInc-postInc |
postInc | 0.00259804725647 | 1000 | 48 | 18 | prefInc-postInc |
postInc | 0.00391817092896 | 1000 | 48 | 20 | postInc-prefInc |
prefInc | 0.00303602218628 | 1000 | 48 | 20 | postInc-prefInc |
prefInc | 0.00229096412659 | 1000 | 48 | 21 | prefInc-postInc |
postInc | 0.00281691551208 | 1000 | 48 | 21 | prefInc-postInc |
postInc | 0.00273108482361 | 1000 | 48 | 23 | postInc-prefInc |
prefInc | 0.00221014022827 | 1000 | 48 | 23 | postInc-prefInc |
prefInc | 0.00266814231873 | 1000 | 48 | 24 | prefInc-postInc |
postInc | 0.00307106971741 | 1000 | 48 | 24 | prefInc-postInc |
postInc | 0.00283098220825 | 1000 | 48 | 26 | postInc-prefInc |
prefInc | 0.00239992141724 | 1000 | 48 | 26 | postInc-prefInc |
prefInc | 0.00246214866638 | 1000 | 48 | 27 | prefInc-postInc |
postInc | 0.00273704528809 | 1000 | 48 | 27 | prefInc-postInc |
postInc | 0.00283288955688 | 1000 | 48 | 29 | postInc-prefInc |
prefInc | 0.00229215621948 | 1000 | 48 | 29 | postInc-prefInc |
prefInc | 0.00220608711243 | 1000 | 48 | 30 | prefInc-postInc |
postInc | 0.0028657913208 | 1000 | 48 | 30 | prefInc-postInc |
postInc | 0.00557017326355 | 2000 | 48 | 32 | postInc-prefInc |
prefInc | 0.0048840045929 | 2000 | 48 | 32 | postInc-prefInc |
prefInc | 0.00449013710022 | 2000 | 48 | 33 | prefInc-postInc |
postInc | 0.0064799785614 | 2000 | 48 | 33 | prefInc-postInc |
postInc | 0.00543594360352 | 2000 | 48 | 35 | postInc-prefInc |
prefInc | 0.00509881973267 | 2000 | 48 | 35 | postInc-prefInc |
prefInc | 0.00483298301697 | 2000 | 48 | 36 | prefInc-postInc |
postInc | 0.00555992126465 | 2000 | 48 | 36 | prefInc-postInc |
postInc | 0.00516104698181 | 2000 | 48 | 38 | postInc-prefInc |
prefInc | 0.00512599945068 | 2000 | 48 | 38 | postInc-prefInc |
prefInc | 0.00484395027161 | 2000 | 48 | 39 | prefInc-postInc |
postInc | 0.00530505180359 | 2000 | 48 | 39 | prefInc-postInc |
postInc | 0.00509691238403 | 2000 | 48 | 41 | postInc-prefInc |
prefInc | 0.00525093078613 | 2000 | 48 | 41 | postInc-prefInc |
prefInc | 0.00447416305542 | 2000 | 48 | 42 | prefInc-postInc |
postInc | 0.00536584854126 | 2000 | 48 | 42 | prefInc-postInc |
postInc | 0.0054669380188 | 2000 | 48 | 44 | postInc-prefInc |
prefInc | 0.00468182563782 | 2000 | 48 | 44 | postInc-prefInc |
prefInc | 0.00512504577637 | 2000 | 48 | 45 | prefInc-postInc |
postInc | 0.00545692443848 | 2000 | 48 | 45 | prefInc-postInc |
postInc | 0.00782418251038 | 3000 | 48 | 47 | postInc-prefInc |
prefInc | 0.00726389884949 | 3000 | 48 | 47 | postInc-prefInc |
prefInc | 0.00674796104431 | 3000 | 48 | 48 | prefInc-postInc |
postInc | 0.007483959198 | 3000 | 48 | 48 | prefInc-postInc |
postInc | 0.00781297683716 | 3000 | 48 | 50 | postInc-prefInc |
prefInc | 0.0069580078125 | 3000 | 48 | 50 | postInc-prefInc |
prefInc | 0.00711393356323 | 3000 | 48 | 51 | prefInc-postInc |
postInc | 0.0072808265686 | 3000 | 48 | 51 | prefInc-postInc |
postInc | 0.00790119171143 | 3000 | 48 | 53 | postInc-prefInc |
prefInc | 0.00662994384766 | 3000 | 48 | 53 | postInc-prefInc |
prefInc | 0.00825595855713 | 3000 | 48 | 54 | prefInc-postInc |
postInc | 0.00739097595215 | 3000 | 48 | 54 | prefInc-postInc |
postInc | 0.00811100006104 | 3000 | 48 | 56 | postInc-prefInc |
prefInc | 0.00712990760803 | 3000 | 48 | 56 | postInc-prefInc |
prefInc | 0.00698399543762 | 3000 | 48 | 57 | prefInc-postInc |
postInc | 0.00758218765259 | 3000 | 48 | 57 | prefInc-postInc |
postInc | 0.00795316696167 | 3000 | 48 | 59 | postInc-prefInc |
prefInc | 0.00725698471069 | 3000 | 48 | 59 | postInc-prefInc |
prefInc | 0.00684094429016 | 3000 | 48 | 60 | prefInc-postInc |
postInc | 0.00778198242188 | 3000 | 48 | 60 | prefInc-postInc |
VIEWER_TGROUP
Представление в табличной форме в виде сгруппированных данных по партии тестирования (по номеру прохода по стратегии), т.е. в одной строке окажутся результаты тестирования функций которые проводились в рамках одной стратегии и в рамках одного прохода теста.
В столбцах таблицы будут отображены данные о размере выборки, времени выполнения, проценту скорости от худшего результата, затраченной памяти, комментария и названия функции, которая стала победителем по времени среди текущего прохода. Отдельно хотелось бы пояснить столбец процента. Данное значение высчитывается как процент, на сколько по времени функция опередила выполнение самой медленной функции. Если значение не установлено, значит эта функция по времени выполнения является аутсайдером в проходе.
Результат тестирования операторов инкрементирования.
size | postInc | prefInc | comment | time win | ||||
time | % | memory | time | % | memory | |||
100 | 0.000650882720947 | 48 | 0.000411987304688 | 36.7 | 48 | postInc-prefInc | prefInc | |
100 | 0.000549077987671 | 48 | 0.000406980514526 | 25.88 | 48 | prefInc-postInc | prefInc | |
100 | 0.000330924987793 | 48 | 0.000287055969238 | 13.26 | 48 | postInc-prefInc | prefInc | |
100 | 0.000365018844604 | 16.66 | 48 | 0.00043797492981 | 48 | prefInc-postInc | postInc | |
100 | 0.000295162200928 | 20.89 | 48 | 0.000373125076294 | 48 | postInc-prefInc | postInc | |
100 | 0.000449895858765 | 48 | 0.000263929367065 | 41.34 | 48 | prefInc-postInc | prefInc | |
100 | 0.00030517578125 | 48 | 0.000247955322266 | 18.75 | 48 | postInc-prefInc | prefInc | |
100 | 0.000265121459961 | 48 | 0.000244140625 | 7.91 | 48 | prefInc-postInc | prefInc | |
100 | 0.000267028808594 | 48 | 0.000245094299316 | 8.21 | 48 | postInc-prefInc | prefInc | |
100 | 0.000273942947388 | 3.93 | 48 | 0.000285148620605 | 48 | prefInc-postInc | postInc | |
1000 | 0.00273203849792 | 48 | 0.00240206718445 | 12.08 | 48 | postInc-prefInc | prefInc | |
1000 | 0.00259804725647 | 5.49 | 48 | 0.00274896621704 | 48 | prefInc-postInc | postInc | |
1000 | 0.00391817092896 | 48 | 0.00303602218628 | 22.51 | 48 | postInc-prefInc | prefInc | |
1000 | 0.00281691551208 | 48 | 0.00229096412659 | 18.67 | 48 | prefInc-postInc | prefInc | |
1000 | 0.00273108482361 | 48 | 0.00221014022827 | 19.07 | 48 | postInc-prefInc | prefInc | |
1000 | 0.00307106971741 | 48 | 0.00266814231873 | 13.12 | 48 | prefInc-postInc | prefInc | |
1000 | 0.00283098220825 | 48 | 0.00239992141724 | 15.23 | 48 | postInc-prefInc | prefInc | |
1000 | 0.00273704528809 | 48 | 0.00246214866638 | 10.04 | 48 | prefInc-postInc | prefInc | |
1000 | 0.00283288955688 | 48 | 0.00229215621948 | 19.09 | 48 | postInc-prefInc | prefInc | |
1000 | 0.0028657913208 | 48 | 0.00220608711243 | 23.02 | 48 | prefInc-postInc | prefInc | |
2000 | 0.00557017326355 | 48 | 0.0048840045929 | 12.32 | 48 | postInc-prefInc | prefInc | |
2000 | 0.0064799785614 | 48 | 0.00449013710022 | 30.71 | 48 | prefInc-postInc | prefInc | |
2000 | 0.00543594360352 | 48 | 0.00509881973267 | 6.2 | 48 | postInc-prefInc | prefInc | |
2000 | 0.00555992126465 | 48 | 0.00483298301697 | 13.07 | 48 | prefInc-postInc | prefInc | |
2000 | 0.00516104698181 | 48 | 0.00512599945068 | 0.68 | 48 | postInc-prefInc | prefInc | |
2000 | 0.00530505180359 | 48 | 0.00484395027161 | 8.69 | 48 | prefInc-postInc | prefInc | |
2000 | 0.00509691238403 | 2.93 | 48 | 0.00525093078613 | 48 | postInc-prefInc | postInc | |
2000 | 0.00536584854126 | 48 | 0.00447416305542 | 16.62 | 48 | prefInc-postInc | prefInc | |
2000 | 0.0054669380188 | 48 | 0.00468182563782 | 14.36 | 48 | postInc-prefInc | prefInc | |
2000 | 0.00545692443848 | 48 | 0.00512504577637 | 6.08 | 48 | prefInc-postInc | prefInc | |
3000 | 0.00782418251038 | 48 | 0.00726389884949 | 7.16 | 48 | postInc-prefInc | prefInc | |
3000 | 0.007483959198 | 48 | 0.00674796104431 | 9.83 | 48 | prefInc-postInc | prefInc | |
3000 | 0.00781297683716 | 48 | 0.0069580078125 | 10.94 | 48 | postInc-prefInc | prefInc | |
3000 | 0.0072808265686 | 48 | 0.00711393356323 | 2.29 | 48 | prefInc-postInc | prefInc | |
3000 | 0.00790119171143 | 48 | 0.00662994384766 | 16.09 | 48 | postInc-prefInc | prefInc | |
3000 | 0.00739097595215 | 10.48 | 48 | 0.00825595855713 | 48 | prefInc-postInc | postInc | |
3000 | 0.00811100006104 | 48 | 0.00712990760803 | 12.1 | 48 | postInc-prefInc | prefInc | |
3000 | 0.00758218765259 | 48 | 0.00698399543762 | 7.89 | 48 | prefInc-postInc | prefInc | |
3000 | 0.00795316696167 | 48 | 0.00725698471069 | 8.75 | 48 | postInc-prefInc | prefInc | |
3000 | 0.00778198242188 | 48 | 0.00684094429016 | 12.09 | 48 | prefInc-postInc | prefInc |
VIEWER_TAVG
Представление в табличной форме в виде усредненных показателей по размеру выборки, т.е. в одной строке окажутся средние показатели тестирования функций по одной выборке.
В столбцах представлена информация по количеству побед функции в выборке, средний процент времени побед, имя функции-победителя. Функции-победитель — определяется количеством побед в выборке.
Результат тестирования операторов инкрементирования.
size | postInc | prefInc | winner | ||
winns | % | winns | % | ||
100 | 3 | 13.83 | 7 | 21.72 | prefInc |
1000 | 1 | 5.49 | 9 | 16.98 | prefInc |
2000 | 1 | 2.93 | 9 | 12.08 | prefInc |
3000 | 1 | 10.48 | 9 | 9.68 | prefInc |
VIEWER_GBUBLE
Итоги
Подытожить хотелось бы тем, что поставленные цели были достигнуты. Но конечно же еще есть над чем поработать. В планах работа над обработкой исключений, добавление возможности смены в настройках набора столбцов а также возможность задавать собственные имена столбцам, увеличение количества тестов. Также хотелось бы добавить возможность удобного тестирования скорости работы с базами данных.