Рубрики
Uncategorized

Тест: Маршрутизатор Amazon работает в 463 раза быстрее, чем пакетный маршрутизатор

Всем привет! Сегодня у нас есть еще один ориентир. Как обычно, у нас есть два случая: http-сервер принимает запрос,… Помеченный как php, маршрутизатор, мезон, бенчмарк.

тесты php-маршрутов (серия из 29 частей)

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

Как обычно, у нас есть два дела:

  1. http-сервер принимает запрос, запускает php-скрипт, который обрабатывает этот запрос, а затем все данные скрипта удаляются из памяти. Все последующие запросы обрабатываются таким же образом. В этом случае очень важно запустить скрипт как можно скорее, и у нас нет времени на длительную предварительную компиляцию и подготовку. Потому что все это будет потеряно после того, как скрипт закончит работать;
  2. php-скрипт запускается, инициирует все внутренние компоненты (и маршрутизатор является одним из них), а затем начинает обработку запросов. Этот случай может быть организован, например, с помощью react-php. Это отличается от предыдущего случая тем, что мы можем потратить разумное время на предварительную компиляцию маршрутов для более быстрой обработки.
// static routes
$router = RouteGenerator::generatePeceeStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/static/0'));
$router->getRequest()->setMethod('get');
$router->start();

$router = RouteGenerator::generatePeceeStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/static/99'));
$router->getRequest()->setMethod('get');
$router->start();

$router = RouteGenerator::generatePeceeStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/static/199'));
$router->getRequest()->setMethod('get');
$router->start();
// and so on up to '/static/999'

Нестатические маршруты:

$router = RouteGenerator::generatePeceeNonStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/param/0/1'));
$router->getRequest()->setMethod('get');
$router->start();

$router = RouteGenerator::generatePeceeNonStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/param/99/1'));
$router->getRequest()->setMethod('get');
$router->start();

$router = RouteGenerator::generatePeceeNonStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/param/199/1'));
$router->getRequest()->setMethod('get');
$router->start();
// and so on up to '/param/999/1'
$router = RouteGenerator::generatePeceeStaticRoutes(1000);

$router->getRequest()->setUrl(new Url('/static/0'));
$router->getRequest()->setMethod('get');
$router->start();

$router->getRequest()->setUrl(new Url('/static/99'));
$router->getRequest()->setMethod('get');
$router->start();

$router->getRequest()->setUrl(new Url('/static/199'));
$router->getRequest()->setMethod('get');
$router->start();
// and so on up to '/static/999'

Нестатические маршруты:

$router = RouteGenerator::generatePeceeNonStaticRoutes(1000);
$router->getRequest()->setUrl(new Url('/param/0/1'));
$router->getRequest()->setMethod('get');
$router->start();

$router->getRequest()->setUrl(new Url('/param/99/1'));
$router->getRequest()->setMethod('get');
$router->start();

$router->getRequest()->setUrl(new Url('/param/199/1'));
$router->getRequest()->setMethod('get');
$router->start();
// and so on up to '/param/999/1'

Первый случай + статические маршруты

+-------------------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+-------+
| benchmark                     | subject     | set | revs | its | mem_peak   | best         | mean         | mode         | worst         | stdev        | rstdev | diff  |
+-------------------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+-------+
| DVKSingleRequestStaticBench   | benchStatic | 0   | 10   | 10  | 3,169,760b | 32,444.300μs | 40,121.470μs | 37,618.470μs | 48,182.400μs  | 5,328.241μs  | 13.28% | 3.19x |
| HoaSingleRequestStaticBench   | benchStatic | 0   | 10   | 10  | 3,772,064b | 55,991.800μs | 64,991.640μs | 62,583.264μs | 81,316.900μs  | 7,115.357μs  | 10.95% | 5.16x |
| MezonSingleRequestStaticBench | benchStatic | 0   | 10   | 10  | 2,211,528b | 10,973.500μs | 12,595.210μs | 11,765.806μs | 14,942.800μs  | 1,358.407μs  | 10.79% | 1.00x |
| PeceeSingleRequestStaticBench | benchStatic | 0   | 10   | 10  | 6,939,320b | 47,342.800μs | 68,375.800μs | 53,452.352μs | 167,419.000μs | 35,936.088μs | 52.56% | 5.43x |
+-------------------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+-------+

Первый случай + нестатические маршруты

+------------------------------+------------+-----+------+-----+--------------+---------------+---------------+---------------+---------------+--------------+--------+-------+
| benchmark                    | subject    | set | revs | its | mem_peak     | best          | mean          | mode          | worst         | stdev        | rstdev | diff  |
+------------------------------+------------+-----+------+-----+--------------+---------------+---------------+---------------+---------------+--------------+--------+-------+
| DVKSingleRequestParamBench   | benchParam | 0   | 10   | 10  | 3,162,144b   | 32,829.700μs  | 41,110.350μs  | 39,790.715μs  | 49,529.600μs  | 5,064.512μs  | 12.32% | 1.00x |
| HoaSingleRequestParamBench   | benchParam | 0   | 10   | 10  | 4,090,992b   | 51,596.500μs  | 65,339.800μs  | 55,031.464μs  | 108,218.000μs | 20,450.626μs | 31.30% | 1.59x |
| MezonSingleRequestParamBench | benchParam | 0   | 10   | 10  | 139,432,880b | 149,946.900μs | 214,165.110μs | 171,992.241μs | 323,257.200μs | 59,659.846μs | 27.86% | 5.21x |
| PeceeSingleRequestParamBench | benchParam | 0   | 10   | 10  | 6,523,504b   | 79,722.600μs  | 92,934.320μs  | 91,920.295μs  | 117,962.000μs | 9,651.642μs  | 10.39% | 2.26x |
+------------------------------+------------+-----+------+-----+--------------+---------------+---------------+---------------+---------------+--------------+--------+-------+

Второй случай + статические маршруты

+-----------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+--------------+-------------+--------+---------+
| benchmark             | subject     | set | revs | its | mem_peak   | best         | mean         | mode         | worst        | stdev       | rstdev | diff    |
+-----------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+--------------+-------------+--------+---------+
| DVKReactStaticBench   | benchStatic | 0   | 100  | 10  | 2,429,064b | 11,877.080μs | 18,817.626μs | 15,714.995μs | 27,952.280μs | 5,398.121μs | 28.69% | 272.60x |
| HoaReactStaticBench   | benchStatic | 0   | 100  | 10  | 2,818,136b | 4,588.740μs  | 9,116.453μs  | 10,712.551μs | 13,069.140μs | 2,891.315μs | 31.72% | 132.07x |
| MezonReactStaticBench | benchStatic | 0   | 100  | 10  | 1,832,360b | 21.040μs     | 69.030μs     | 55.919μs     | 199.270μs    | 49.229μs    | 71.32% | 1.00x   |
| PeceeReactStaticBench | benchStatic | 0   | 10   | 10  | 4,098,184b | 24,875.300μs | 32,002.620μs | 34,481.087μs | 41,128.800μs | 5,201.623μs | 16.25% | 463.60x |
+-----------------------+-------------+-----+------+-----+------------+--------------+--------------+--------------+--------------+-------------+--------+---------+

Второй случай + нестатические маршруты

+----------------------+------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+--------+
| benchmark            | subject    | set | revs | its | mem_peak   | best         | mean         | mode         | worst         | stdev        | rstdev | diff   |
+----------------------+------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+--------+
| DVKReactParamBench   | benchParam | 0   | 100  | 10  | 2,433,456b | 14,381.460μs | 18,069.357μs | 15,746.601μs | 26,204.970μs  | 3,907.676μs  | 21.63% | 6.82x  |
| HoaReactParamBench   | benchParam | 0   | 100  | 10  | 3,286,352b | 3,862.330μs  | 4,365.385μs  | 4,270.722μs  | 5,134.820μs   | 341.324μs    | 7.82%  | 1.65x  |
| MezonReactParamBench | benchParam | 0   | 100  | 10  | 3,053,640b | 1,155.640μs  | 2,648.767μs  | 2,063.057μs  | 6,195.750μs   | 1,445.991μs  | 54.59% | 1.00x  |
| PeceeReactParamBench | benchParam | 0   | 10   | 10  | 4,479,280b | 59,373.000μs | 74,590.120μs | 65,226.368μs | 114,763.200μs | 17,391.520μs | 23.32% | 28.16x |
+----------------------+------------+-----+------+-----+------------+--------------+--------------+--------------+---------------+--------------+--------+--------+

Больше статей можно найти в моем Твиттере Mezon Framework

мезон/маршрутизатор теперь:

  • структура для маршрутизации с 100% покрытием кода
  • 10,0 баллов на scrutinizer-ci.com
  • маршрутизатор является частью проекта Amazon

Репо на github.com: Репо на github.com:

тесты php-маршрутов (серия из 29 частей)

Оригинал: “https://dev.to/alexdodonov/benchmark-mezon-router-is-up-to-463-times-faster-then-pecee-router-53ae”