Оптимизация производительности Laravel с утилитой Benchmark

Источник: «Optimizing Performance with Laravel’s Benchmark Utility»
В мире веб-разработки производительность имеет ключевое значение. Laravel предоставляет утилиту Benchmark, позволяющую разработчикам измерять и сравнивать время выполнения различных фрагментов кода. Этот инструмент неоценим для выявления узких мест и оптимизации производительности приложения. Давайте рассмотрим, как использовать утилиту Benchmark в проектах Laravel.

Базовое применение

Самый простой способ использования утилиты Benchmark — метод dd, измеряющий и отображающий время выполнения:

use App\Models\User;
use Illuminate\Support\Benchmark;

Benchmark::dd(fn () => User::find(1));

В результате будет выведено время выполнения в миллисекундах, например: 0,1 ms

Сравнение нескольких сценариев

Можно сравнить производительность различных фрагментов кода:

Benchmark::dd([
'Scenario 1' => fn () => User::count(),
'Scenario 2' => fn () => User::all()->count(),
]);

В результате получится что-то вроде:

Scenario 1: 0.5 ms
Scenario 2: 20.0 ms

Это удобно, когда необходимо выбрать один из подходов к решению проблемы.

Итерации для точности

Для очень быстрых операций однократное выполнение не даст точной картины. Можно указать количество итераций выполнения операции:

Benchmark::dd(fn () => User::count(), iterations: 10); // 0.5 ms

Эта операция выполнится 10 раз и вернёт среднее время выполнения.

Получение результатов

Иногда необходим как результат операции, так и время её выполнения. Метод value возвращает кортеж, содержащий и то, и другое:

[$count, $duration] = Benchmark::value(fn () => User::count());

echo "Found $count users in $duration milliseconds";

Реальный пример: Оптимизация запроса дашборда

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

use App\Models\User;
use Illuminate\Support\Benchmark;

$results = Benchmark::dd([
'Method 1' => fn () => User::whereHas('posts', '>', 5)->count(),
'Method 2' => fn () => User::withCount('posts')->having('posts_count', '>', 5)->count()
]);
// Output might look like:
// Method 1: 15.2 ms
// Method 2: 8.7 ms

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

Утилита Laravel Benchmark — мощный инструмент для разработчиков, стремящихся оптимизировать приложения. Предоставляя простые в использовании методы для определения времени выполнения и сравнения кода, Benchmark позволяет принимать решения по оптимизации производительности на основе данных. Если вы занимаетесь тонкой настройкой запросов к базе данных, оптимизацией алгоритмов или просто интересуетесь последствиями различных подходов к коду для производительности, утилита Benchmark станет бесценным помощником в наборе инструментов Laravel.

Дополнительные материалы

Предыдущая Статья

Валидация (безопасных) URL-адресов

Следующая Статья

Как создавать фасады в Laravel