Настройка производительности
CodeIgniter предоставляет два отдельных инструмента для помощи в наладке производительности кода и тестирования различных вариантов: Таймер и Итератор. Таймер позволяет легко рассчитать время между двумя точками выполнения вашего сценария. Итератор позволяет настроить несколько вариантов и запустить эти тесты, записывая статистику производительности и использования памяти, чтобы помочь вам определить, какая версия является лучшей.
Класс Таймера всегда активен, начиная работу с момента вызова фреймворка и до момента отправки вывода пользователю, обеспечивая очень точное измерение времени выполнения всей системы.
Использование Таймера
С помощью Таймера можно измерить время между двумя моментами в выполнении вашего приложения. Это упрощает измерение производительности различных аспектов вашего приложения. Все измерения производятся с использованием методов start() и stop().
Методы start() принимают единственный параметр: имя таймера. Вы можете использовать любую строку в качестве имени таймера. Оно используется только для того, чтобы вы могли сослаться на измерение в дальнейшем:
$benchmark = \Config\Services::timer();
$benchmark->start('render view');
Метод stop() принимает имя таймера, который нужно остановить, в качестве единственного параметра, также:
$benchmark->stop('render view');
Имя не чувствительно к регистру, но в остальном должно совпадать с именем, заданным при запуске таймера.
В качестве альтернативы, вы можете использовать глобальную функцию глобальную функцию timer() для запуска и остановки таймеров:
// Start the timer
timer('render view');
// Stop a running timer,
// if one of this name has been started
timer('render view');
Просмотр точек отслеживания производительности
Когда ваше приложение выполняется, все заданные таймеры собираются классом Таймера. Однако он не отображает их автоматически. Вы можете получить все свои таймеры, вызвав метод getTimers(). Он возвращает массив информации о отслеживании производительности, включая время начала, завершения и продолжительность:
$timers = $benchmark->getTimers();
// Timers =
[
'render view' => [
'start' => 1234567890,
'end' => 1345678920,
'duration' => 15.4315, // number of seconds
]
]
Вы можете изменить точность вычисленной продолжительности, передав в качестве единственного параметра количество знаков после запятой, которое вы хотите отобразить. Значение по умолчанию — 4 знака после запятой:
$timers = $benchmark->getTimers(6);
Таймеры автоматически отображаются в Панели отладки.
Отображение времени выполнения
В то время как метод getTimers() предоставит вам исходные данные для всех таймеров в вашем проекте, вы можете получить продолжительность одного таймера в секундах с помощью метода getElapsedTime(). Первый параметр — имя таймера для отображения. Второй — количество знаков после запятой для отображения. По умолчанию это 4:
echo timer()->getElapsedTime('render view');
// Displays: 0.0234
Использование Итератора
Итератор — это простой инструмент, который позволяет вам протестировать несколько вариантов решения, чтобы увидеть различия в скорости и поведении потребления памяти. Вы можете добавить любое количество «задач» для его выполнения, и класс выполнит задачу сотни или тысячи раз, чтобы получить более четкую картину производительности. Результаты затем можно получить и использовать вашим скриптом или отобразить в виде HTML-таблицы.
Создание задач для выполнения
Задачи определяются в замыканиях. Любой вывод, созданный задачей, будет автоматически отброшен. Они добавляются в класс Итератора через метод add(). Первый параметр — имя, которое вы хотите использовать для обозначения этого теста. Второй параметр — само замыкание:
$iterator = new \CodeIgniter\Benchmark\Iterator();
// Add a new task
$iterator->add('single_concat', function () {
$str = 'Some basic'.'little'.'string concatenation test.';
});
// Add another task
$iterator->add('double', function ($a = 'little') {
$str = "Some basic {$little} string test.";
});
Запуск задач
После добавления задач для выполнения, вы можете использовать метод run() для многократного циклического прохождения по задачам. По умолчанию каждая задача будет выполняться 1000 раз. Это, вероятно, достаточно для большинства простых тестов. Если вам нужно выполнить тесты большее количество раз, вы можете передать это число в качестве первого параметра:
// Run the tests 3000 times. $iterator->run(3000);
После выполнения он вернёт HTML-таблицу с результатами теста. Если вы не хотите отображать результаты, вы можете передать false в качестве второго параметра:
// Don't display the results. $iterator->run(1000, false);
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/testing/benchmark.html