Найти в Дзене
Алексей Додонов

Новый бенчмарк: Mezon Router VS Phroute

Всем привет. Сегодня будем сравнивать эти два роутера.
В общем-то как и ранее мы рассматриваем два кейса:
1. http сервер принимает запрос от клиента, запускает php скрипт, который собственно и обрабатывает этот запрос, затем выгружает скрипт и все его данные из памяти. Все последующие запросы обрабатываются в таком же ключе. При таком раскладе критично важно запускать скрипт как можно быстрее,
Оглавление

Всем привет. Сегодня будем сравнивать эти два роутера.

В общем-то как и ранее мы рассматриваем два кейса:

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

2. запускается php скрипт, инициализирует все необходимые объекты и структуры (роутер естественно тоже) и затем запускает цикл обработки запросов. Так, например работает react-php. Этот кейс принципиально отличается от предыдущего, потому что тут мы уже можем потратить достаточно длительное время на инициализацию, лишь бы потом работало максимально быстро.

Код бэнчмарка для первого кейса

// static routes
for ($i = 0; $i < \Mezon\Benchmark\Base::$iterationsAmount; $i ++) {
$router = \Mezon\Benchmark\RouteGenerator::generatePhrouteStaticRoutes(1000);

$router->dispatch('GET', parse_url('/static/' . rand(0, 1000 - 1), PHP_URL_PATH));
}
// non-static routes
for ($i = 0; $i < \Mezon\Benchmark\Base::$iterationsAmount; $i ++) {
$router = \Mezon\Benchmark\RouteGenerator::generatePhrouteNonStaticRoutes(1000);

$router->dispatch('GET', parse_url('/param/' . rand(0, 1000 - 1) . '/1', PHP_URL_PATH));
}

Второй кейс

// static routes
$router = \Mezon\Benchmark\RouteGenerator::generatePhrouteStaticRoutes(1000);

$startTime = microtime(true);
for ($i = 0; $i < \Mezon\Benchmark\Base::$iterationsAmount; $i ++) {
$router->dispatch('GET', parse_url('/static/' . rand(0, 1000 - 1), PHP_URL_PATH));
}
return microtime(true) - $startTime;
// non static routes
// non-static routes
$router = \Mezon\Benchmark\RouteGenerator::generatePhrouteNonStaticRoutes(1000);

$startTime = microtime(true);
for ($i = 0; $i < \Mezon\Benchmark\Base::$iterationsAmount; $i ++) {
$router->dispatch('GET', parse_url('/param/' . rand(0, 1000 - 1) . '/1', PHP_URL_PATH));
}
return microtime(true) - $startTime;

Результаты

-2

Как видно из бенчмарка - Mezon Router почти во всех кейсах самый производительный.

Что такое Mezon Router?

mezon/router это:

  1. фреймворк для роутинга со 100% покрытием кода;
  2. 10.0 баллов на scrutinizer-ci.com
  3. роутер является частью проекта Mezon

Репа на github.com: https://github.com/alexdodonov/mezon-router

Будет здорово, если вы поучаствуете в жизни проекта. Это может быть написание документации, рекомендации друзьям в социальных сетях, правка багов, рефакторинг, или даже запрос тикета на новую функциональность. В любом случае большое спасибо.