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-скрипта?

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

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

Я расскажу о 4-х способах, как избавиться от нее.

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

Увеличение времени выполнения PHP-скрипта через конфигурационный файл php.ini

В качестве первого способа для увеличения времени выполнения скрипта мы будем использовать файл конфигурации php.ini.

Для того чтобы точно узнать, где находится этот файл, прочитайте эту статью.

Открываете его удобным для вас способом и в самый низ вставляете:

Где «300» означает 300 секунд (меняете на свое). Этот файл, к сожалению, не на всех хостингах доступен пользователям для редактирования.

Читайте также:  код события 1000 application error

Увеличение времени выполнения PHP-скрипта через встроенную функцию «ini_set»

Второй способ основывается на использовании функции «ini_set». Ее вы вставляете непосредственно в сам файл скрипта, желательно в самый верх. Пример:

Здесь значение «300» вы также сменяете на нужное вам в секундах. Обратите внимание, что при использовании PHP в безопасном режиме эта функция будет недоступна.

Увеличение времени выполнения PHP-скрипта через встроенную функцию «set_time_limit»

Третий способ, наверное, один из самых популярных – использование функции «set_time_limit» для изменения времени выполнения скрипта. Также используется непосредственно в самом файле PHP. Пример:

Здесь «300» вы также изменяете на нужное вам значение. Вставлять код желательно в самом верху.

Последний вариант заключается в редактировании файла .htaccess, который находится в корне вашего сайта (если таковой отсутствует – создайте его).

В самый верх этого файла вставьте:

Значение «300» вы также меняете на свое.

Обратите внимание, что во всех случаях время выполнения скрипта указывается в секундах. Помимо этого, значение параметра во всех способах может принимать «0», что означает неограниченное время выполнения.

Как узнать, сколько времени отведено на выполнение PHP-скрипта?

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

Для этого создайте PHP-файл в корне вашего сайта, где выведите значение установленного времени:

Если время равняется тому, что вы указали – поздравляем вас, вы достигли желаемой цели. В противном же случае прочитайте статью еще раз, напишите в комментариях о вашей проблеме или направьте ее вашему хостинг-провайдеру.

Источник

microtime

(PHP 4, PHP 5, PHP 7, PHP 8)

microtime — Возвращает текущую метку времени Unix с микросекундами

Описание

Функция microtime() возвращает текущую метку времени Unix с микросекундами. Эта функция доступна только на операционных системах, в которых есть системный вызов gettimeofday().

Список параметров

Возвращаемые значения

Примеры

Пример #1 Замер времени выполнения скрипта

// Спим некоторое время
usleep ( 100 );

Пример #2 Пример использования microtime() и REQUEST_TIME_FLOAT

Смотрите также

User Contributed Notes 20 notes

All these timing scripts rely on microtime which relies on gettimebyday(2)

This can be inaccurate on servers that run ntp to syncronise the servers
time.

For timing, you should really use clock_gettime(2) with the
CLOCK_MONOTONIC flag set.

This returns REAL WORLD time, not affected by intentional clock drift.

This may seem a bit picky, but I recently saw a server that’s clock was an
hour out, and they’d set it to ‘drift’ to the correct time (clock is speeded
up until it reaches the correct time)

Those sorts of things can make a real impact.

Any solutions, seeing as php doesn’t have a hook into clock_gettime?

Here is a solution to easily calculate the execution time of a script without having to alter any configuration parameter. It uses the former way of getting microseconds.

It is important to note that microtime(TRUE) does NOT always return a float (at least in PHP 5.x; I have not tested 7.x). If it happens to land on an exact second, it returns an integer instead.

The description of «msec», in this documentation, is very bad.

It is NOT the microseconds that have elapsed since «sec» (if so, it should be given as an integer, without the «0.» in the beginning of the string).
It IS the fractional part of the time elapsed since «sec», with microseconds (10E-6) precision, if the last «00» are not considered significant».
If the last two digits are significant, then we would have a precision of 10E-8 seconds.

mixed mini_bench_to(array timelist[, return_array=false])
return a mini bench result

-the timelist first key must be ‘start’
-default return a resume string, or array if return_array= true :
‘total_time’ (ms) in first row
details (purcent) in next row

The function to include :

Using microtime() to set ‘nonce’ value:

Out of the box, microtime(true) will echo something like:

Which is obviously less than microsecond accuracy. You’ll probably want to bump the ‘precision’ setting up to 16 which will echo something like:

*Internally* it will be accurate to the six digits even with the default ‘precision’, but a lot of things (ie. NoSQL databases) are moving to all-text representations these days so it becomes a bit more important.

* 14 at the time of writing

//timestamp in milliseconds:
intval ( microtime ( true )* 1000 )

//timestamp in microseconds:
intval ( microtime ( true )* 1000 * 1000 )

//timestamp in nanoseconds:
intval ( microtime ( true )* 1000 * 1000 * 1000 )

While doing some experiments on using microtime()’s output for an entropy generator I found that its microsecond value was always quantified to the nearest hundreds (i.e. the number ends with 00), which affected the randomness of the entropy generator. This output pattern was consistent on three separate machines, running OpenBSD, Mac OS X and Windows.

The solution was to instead use gettimeofday()’s output, as its usec value followed no quantifiable pattern on any of the three test platforms.

A convenient way to write the current time / microtime as formatted string in your timezone as expression?

DateTime now is: 2018-06-01 14:54:58 Europe/Berlin
Microtime now is: 180601 14:54:58.781716 Europe/Berlin

I have been getting negative values substracting a later microtime(true) call from an earlier microtime(true) call on Windows with PHP 5.3.8

$time_start = micro_time ();
sleep ( 1 );
$time_stop = micro_time ();

I use this for measure duration of script execution. This function should be defined (and of couse first call made) as soon as possible.

?>

However it is true that result depends of gettimeofday() call. ([jamie at bishopston dot net] wrote this & I can confirm)
If system time change, result of this function can be unpredictable (much greater or less than zero).

Of the methods I’ve seen here, and thought up myself, to convert microtime() output into a numerical value, the microtime_float() one shown in the documentation proper(using explode,list,float,+) is the slowest in terms of runtime.

I implemented the various methods, ran each in a tight loop 1,000,000 times, and compared runtimes (and output). I did this 10 times to make sure there wasn’t a problem of other things putting a load spike on the server. I’ll admit I didn’t take into account martijn at vanderlee dot com’s comments on testing accuracy, but as I figured the looping code etc would be the same, and this was only meant as a relative comparison, it should not be necessary.

Get date time with milliseconds

Читайте также:  как сделать классический вид меню пуск в виндовс 10

Test accuracy by running it in a loop.

//Function to convert microtime return to human readable units
//функция для конвертации времени, принимает значения в секундах

Источник

Инструмент анализа скорости 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

Итоги

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

Источник

Компьютерный онлайн портал