Бенчмарки маршрутов HLEB2 us Slim Framework

03 Мая (ред)

Несмотря на то, что Slim является микро-фреймворком, а HLEB2 перестал быть с приставкой "микро", по привычке провожу сравнение производительности последнего с микро-фреймворками.

Как известно, измерение вывода Hello World у фреймворков дело поверхностное. Однако, можно попробовать нагрузить маршрутизатор большим количеством роутов и посмотреть, что из этого выйдет. Для испытаний взял последнюю на данный момент версию Slim Framework (v4.13.0) и HLEB2 (v2.0.12). Под капотом у Slim сторонний роутер nikic/fast-route (v1.3.0) так что, по сути, буду тестировать его. Этот маршрутизатор сделал Никита Попов, почитать про устройство можно здесь. Роутер HLEB2 основан на другом принципе (сегментация и кеширование), поэтому интересно, как эти две разные архитектуры поведут себя. Установив эти фреймворки в базовой минимальной комплектации в соседние папки на одном ПК, а также при поддержке php 8.2, создал им следующие аналогичные условия в маршрутах:

Slim

for($i = 0; $i < 10_000; $i++) {
    $app->get("/page{$i}/{name{$i}}", function (Request $request, Response $response, $args) use ($i) {
        $response->getBody()->write("Page {$i}");
        return $response;
    });
}

HLEB2

for($i = 0; $i < 10_000; $i++) {
    Route::get("/page{$i}/{name{$i}}", "Page {$i}");
}

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

Итак. Надо сразу сказать, что первый запрос к HLEB2 был довольно долгим, около 7 секунд, это кешировались данные. Но для 10 000 роутов не так уж и много. Потом я сделал еще несколько запросов для обоих тестируемых фреймворков, повышая на единицу номер "страницы", чтобы значения "утряслись". Получилось, что показатели выполнения Slim оказались в промежутке 0.27 - 0.15 секунды, а HLEB2... 0.006 - 0.002 секунды, что является довольно значительным отрывом. Для HLEB2 это практически время использования одного роута в маршрутизации.

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

PS По показателям используемой пиковой памяти тоже большой разрыв для этого теста (напоминаю, что речь идет о 10 тысячах маршрутов):

Slim 24.57 MB против HLEB2 0.5 MB

fomiash fomiash + 200

1 Ответ

  1. Evg Evg 08 Мая

    Здорово! Разница конечно есть существенная. +



Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.