Hi, all! Recently I have decided to measure speed of my router
And results were quite interesting.
I have measured the productivity in two tests:
Static routes without any regexp parsing or variables in URI
URI with variables
The first test for the 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);
And the second test:
// 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);
For the klein/klein router it is almost the same:
// 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);
And the second one:
// 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);
I have got the following results:
As you can see - Mezon router is up to 25 times faster than Klein router.
Learn more
More information can be found here:
What is mezon/router?
mezon/router now is:
- framework for routing with 100% code coverage
- 10.0 points on scrutinizer-ci.com
- router is a part of the Mezon Project
Repo on github.com: https://github.com/alexdodonov/mezon-router
Top comments (6)
But why are there such a big differences in performance?
mezon/router provides only basic routing functionality. it made possible to use more simple URL parser and find necessary route handler faster.
When you say only basic routing functionality, What are you not providing. I like the idea of automatic url generation with action-suffix. I mainly use a rest call to graphql-rest hybrid endpoint. Which means that uri strings are dynamically generated, e.g
books/authors/bio
andbook/authors/bio/contact
. Currently I am using slim framework with its default fastroute. Is your router PSR-7 compliment?It is not yet PSR-7 compliment. But I hope it will be. Soon )
Any comments people?
I dare you to beat me to this router in the repository:
github.com/spiral/router