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

Новый роутер для PHP, который до 25 раз быстрее чем Klein

Оглавление

Привет всем! Недавно я решил измерить производительность моего роутера

Результаты были весьма интересными.

Производительность замерялась в двух тестах:

  • статические роуты
  • УРЛы с параметрами

Первый тест для Mezon/Router:

// static routes
$routerTest1 = new \Mezon\Router\Router();

$routerTest1->addRoute('/static', function () {
return 'static';
}, 'GET');

$iterationCount1 = 100000;

$startTime1 = microtime(true);
for ($i = 0; $i < $iterationCount1; $i ++) {
$routerTest1->callRoute('/static');
}
$endTime1 = microtime(true);

Второй тест:

// parametrized routes
$routerTest2 = new \Mezon\Router\Router();

$routerTest2->addRoute('/[i:id]', function () {
return 'param';
}, 'GET');

$iterationCount2 = 100000;

$startTime2 = microtime(true);
for ($i = 0; $i < $iterationCount2; $i ++) {
$routerTest2->callRoute('/1');
}
$endTime2 = microtime(true);

Для роутера klein/klein тесты выглядят практически идентично:

// static routes
$_SERVER['REQUEST_URI'] = '/static';

$routerTest1 = new \Klein\Klein();

$routerTest1->respond('GET', '/static', **function** () {
return 'static';
});

$iterationCount1 = 10000;

$startTime1 = microtime(true);
for ($i = 0; $i < $iterationCount1; $i ++) {
$routerTest1->dispatch(null,null,true,\Klein\Klein::DISPATCH_CAPTURE_AND_RETURN);
}
$endTime1 = microtime(true);

И второй тест для klein/klein:

// parametrized routes
$_SERVER['REQUEST_URI'] = '/1';

$routerTest2 = new \Klein\Klein();

$routerTest2->respond('GET', '/[i:id]', function () {
return 'static';
});

$iterationCount2 = 10000;

$startTime2 = microtime(true);
for ($i = 0; $i < $iterationCount2; $i ++) {
$routerTest2->dispatch(null,null,true,\Klein\Klein::*DISPATCH_CAPTURE_AND_RETURN*);
}
$endTime2 = microtime(true);

Результаты оказались следующие:

-2

Как можно увидеть Mezon/Router в 25 раз быстрее Klein/Klein.

Что такое Mezon/Router?

mezon/router это:

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

Репозиторий github.com: https://github.com/alexdodonov/mezon-router

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