Compare commits

...

6 Commits

Author SHA1 Message Date
a889a9f0b8 up
All checks were successful
/ build (push) Successful in 1m23s
2025-06-22 16:32:50 +02:00
71fc44acc5 change provider
All checks were successful
/ build (push) Successful in 42s
2025-04-01 22:09:36 +02:00
36cd9266b3 remove links
All checks were successful
/ build (push) Successful in 3m55s
2025-04-01 22:04:13 +02:00
21ff0825cc up python
All checks were successful
/ build (push) Successful in 37s
2025-03-04 20:07:53 +01:00
c7cdd65f87 add link
All checks were successful
/ build (push) Successful in 3m51s
2025-03-03 20:37:47 +01:00
3b2adea40f up ver
All checks were successful
/ build (push) Successful in 34s
2025-03-02 22:21:00 +01:00
7 changed files with 137 additions and 142 deletions

View File

@ -9,7 +9,7 @@ We'll be comparing the read performance of 6 Web APIs frameworks, sharing the sa
{{< /lead >}} {{< /lead >}}
{{< alert >}} {{< alert >}}
Update April 2024 for PHP: I replaced previous Apache results by new [FrankenPHP](https://frankenphp.dev/). Now PHP is back in the game, with huge performance increase thanks to worker mode. Outdated post, check the [lastest]({{< ref "/posts/23-web-api-benchmarks-2025" >}}) for updated benchs.
{{< /alert >}} {{< /alert >}}
This is not a basic synthetic benchmark, but a real world benchmark with DB data tests, and multiple scenarios. This post may be updated when new versions of frameworks will be released or any suggestions for performance related improvement in below commentary section. This is not a basic synthetic benchmark, but a real world benchmark with DB data tests, and multiple scenarios. This post may be updated when new versions of frameworks will be released or any suggestions for performance related improvement in below commentary section.

View File

@ -12,10 +12,10 @@ This is a 2025 update from previous [2024 benchmark]({{< ref "/posts/22-web-api-
| Framework & Source code | Runtime | ORM | | Framework & Source code | Runtime | ORM |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------------- | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------------- |
| [Laravel 11](https://github.com/adr1enbe4udou1n/laravel-realworld-example-app) ([api](https://laravelrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/laravel/latest)) | FrankenPHP 8.4 | Eloquent | | [Laravel 12](https://github.com/adr1enbe4udou1n/laravel-realworld-example-app) ([api](https://laravelrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/laravel/latest)) | FrankenPHP 8.4 | Eloquent |
| [Symfony 7.2](https://github.com/adr1enbe4udou1n/symfony-realworld-example-app) ([api](https://symfonyrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/symfony/latest)) | FrankenPHP 8.4 | Doctrine | | [Symfony 7.2](https://github.com/adr1enbe4udou1n/symfony-realworld-example-app) ([api](https://symfonyrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/symfony/latest)) | FrankenPHP 8.4 | Doctrine |
| [FastAPI](https://github.com/adr1enbe4udou1n/fastapi-realworld-example-app) ([api](https://fastapirealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/fastapi/latest)) | Python 3.13 (asyncio) | SQLAlchemy 2.0 (asyncio) | | [FastAPI](https://github.com/adr1enbe4udou1n/fastapi-realworld-example-app) ([api](https://fastapirealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/fastapi/latest)) | Python 3.13 (asyncio) | SQLAlchemy 2.0 (asyncio) |
| [NestJS 10](https://github.com/adr1enbe4udou1n/nestjs-realworld-example-app) ([api](https://nestjsrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/nestjs/latest)) | Node 22 | Prisma 6 | | [NestJS 11](https://github.com/adr1enbe4udou1n/nestjs-realworld-example-app) ([api](https://nestjsrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/nestjs/latest)) | Node 22 | Prisma 6 |
| [Spring Boot 3.4](https://github.com/adr1enbe4udou1n/spring-boot-realworld-example-app) ([api](https://springbootrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/spring-boot/latest)) | Java 21 | Hibernate 6 | | [Spring Boot 3.4](https://github.com/adr1enbe4udou1n/spring-boot-realworld-example-app) ([api](https://springbootrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/spring-boot/latest)) | Java 21 | Hibernate 6 |
| [ASP.NET Core 9](https://github.com/adr1enbe4udou1n/aspnetcore-realworld-example-app) ([api](https://aspnetcorerealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/aspnet-core/latest)) | .NET 9.0 | EF Core 9 | | [ASP.NET Core 9](https://github.com/adr1enbe4udou1n/aspnetcore-realworld-example-app) ([api](https://aspnetcorerealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/aspnet-core/latest)) | .NET 9.0 | EF Core 9 |
@ -158,7 +158,7 @@ services:
- traefik.http.services.fastapi.loadbalancer.server.port=8000 - traefik.http.services.fastapi.loadbalancer.server.port=8000
replicas: 2 replicas: 2
placement: placement:
max_replicas_per_node: 2 max_replicas_per_node: 1
constraints: constraints:
- node.labels.run == true - node.labels.run == true
@ -1030,30 +1030,28 @@ Huge gap in performance against Laravel Octane here, about twice better ! Withou
### FastAPI ### FastAPI
As a side note here, uvicorn is limited to 1 CPU core, so I use 2 replicas on each worker to use all CPU cores.
#### FastAPI scenario 1 #### FastAPI scenario 1
Iteration creation rate = **15/s** Iteration creation rate = **15/s**
```txt ```txt
checks.........................: 100.00% 39525 out of 39525 checks.........................: 100.00% 28764 out of 28764
data_received..................: 324 MB 5.2 MB/s data_received..................: 234 MB 3.7 MB/s
data_sent......................: 3.5 MB 56 kB/s data_sent......................: 2.6 MB 41 kB/s
dropped_iterations.............: 126 2.032659/s dropped_iterations.............: 336 5.300365/s
http_req_blocked...............: avg=22.84µs min=258ns med=1.01µs max=41.9ms p(90)=1.45µs p(95)=1.6µs http_req_blocked...............: avg=39.99µs min=242ns med=669ns max=68.16ms p(90)=1.14µs p(95)=1.32µs
http_req_connecting............: avg=1.32µs min=0s med=0s max=3.49ms p(90)=0s p(95)=0s http_req_connecting............: avg=1.66µs min=0s med=0s max=3.75ms p(90)=0s p(95)=0s
http_req_duration..............: avg=69.4ms min=6.28ms med=62.49ms max=323.87ms p(90)=131.32ms p(95)=147.63ms http_req_duration..............: avg=103.18ms min=6.22ms med=101.32ms max=452.09ms p(90)=139.92ms p(95)=157.15ms
{ expected_response:true }...: avg=69.4ms min=6.28ms med=62.49ms max=323.87ms p(90)=131.32ms p(95)=147.63ms { expected_response:true }...: avg=103.18ms min=6.22ms med=101.32ms max=452.09ms p(90)=139.92ms p(95)=157.15ms
http_req_failed................: 0.00% 0 out of 39525 http_req_failed................: 0.00% 0 out of 28764
http_req_receiving.............: avg=410.93µs min=24.46µs med=281.1µs max=17.76ms p(90)=784.35µs p(95)=1.12ms http_req_receiving.............: avg=460.02µs min=28.21µs med=334.44µs max=18.75ms p(90)=862.97µs p(95)=1.19ms
http_req_sending...............: avg=121.75µs min=14.48µs med=105.29µs max=11.05ms p(90)=179.47µs p(95)=221.68µs http_req_sending...............: avg=93.58µs min=21.19µs med=79.76µs max=3.26ms p(90)=141.54µs p(95)=167.69µs
http_req_tls_handshaking.......: avg=19.44µs min=0s med=0s max=28.07ms p(90)=0s p(95)=0s http_req_tls_handshaking.......: avg=35.6µs min=0s med=0s max=28.74ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=68.87ms min=5.63ms med=61.98ms max=323.69ms p(90)=130.68ms p(95)=147ms http_req_waiting...............: avg=102.63ms min=5.98ms med=100.76ms max=451.57ms p(90)=139.32ms p(95)=156.56ms
http_reqs......................: 39525 637.625912/s http_reqs......................: 28764 453.749133/s
iteration_duration.............: avg=3.57s min=822.25ms med=3.74s max=5.09s p(90)=4.25s p(95)=4.37s iteration_duration.............: avg=5.28s min=1.61s med=5.38s max=6.19s p(90)=5.71s p(95)=5.79s
iterations.....................: 775 12.502469/s iterations.....................: 564 8.897042/s
vus............................: 1 min=1 max=50 vus............................: 17 min=15 max=50
vus_max........................: 50 min=50 max=50 vus_max........................: 50 min=50 max=50
``` ```
@ -1065,13 +1063,13 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'Req/s', label: 'Req/s',
data: [ data: [
30, 575, 674, 684, 617, 668, 634, 638, 647, 50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
621, 662, 661, 670, 659, 617, 672, 644, 653, 447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
623, 606, 663, 650, 634, 666, 625, 652, 650, 449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
671, 651, 617, 598, 620, 624, 626, 602, 657, 439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
646, 649, 650, 638, 669, 640, 639, 636, 628, 439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
636, 654, 651, 668, 643, 663, 645, 644, 618, 444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
575, 627, 622, 660, 643, 644, 637, 626, 413 444, 452, 432, 374, 1
] ]
} }
] ]
@ -1086,12 +1084,12 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'VUs', label: 'VUs',
data: [ data: [
13, 18, 20, 24, 29, 33, 38, 41, 49, 47, 49, 49, 15, 27, 39, 50, 50, 50, 49, 48, 48, 50, 50, 50,
46, 49, 49, 50, 42, 47, 49, 50, 50, 48, 50, 49, 48, 46, 49, 50, 48, 49, 49, 50, 50, 50, 49, 48,
48, 46, 45, 50, 50, 49, 49, 50, 50, 47, 47, 48, 47, 48, 50, 47, 48, 50, 47, 50, 50, 48, 46, 49,
50, 48, 50, 46, 49, 50, 50, 49, 50, 48, 47, 49, 50, 50, 50, 49, 48, 50, 48, 49, 50, 50, 49, 44,
49, 48, 50, 49, 50, 49, 49, 48, 46, 48, 49, 49, 49, 49, 49, 48, 50, 48, 50, 50, 47, 50, 49, 50,
34, 1 45, 37, 17
] ]
} }
] ]
@ -1102,12 +1100,13 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'Duration (ms)', label: 'Duration (ms)',
data: [ data: [
19, 17, 24, 27, 36, 41, 48, 57, 64, 73, 71, 75, 21, 34, 77, 93, 102, 110, 107, 104, 105, 109,
73, 71, 76, 72, 77, 67, 70, 80, 73, 75, 74, 75, 112, 106, 105, 103, 106, 107, 106, 103, 103, 102,
78, 76, 73, 69, 74, 80, 79, 78, 78, 77, 81, 71, 108, 103, 102, 107, 103, 109, 106, 106, 107, 108,
74, 74, 75, 75, 71, 72, 76, 76, 78, 74, 72, 76, 112, 103, 103, 111, 105, 107, 105, 104, 107, 107,
71, 75, 70, 75, 75, 79, 84, 78, 77, 72, 74, 76, 115, 103, 108, 103, 107, 108, 105, 102, 101, 104,
74, 64, 27 112, 102, 105, 104, 105, 110, 104, 106, 108, 105,
111, 102, 85, 47, 8
] ]
} }
] ]
@ -1121,10 +1120,10 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'User', label: 'User',
data: [ data: [
0.02, 0.09, 0.72, 0.72, 0.02, 0.02, 0.1, 0.74,
0.76, 0.76, 0.75, 0.75, 0.78, 0.77, 0.79, 0.79,
0.75, 0.75, 0.76, 0.77, 0.78, 0.78, 0.78, 0.78,
0.78, 0.78, 0.17, 0.02, 0.78, 0.77, 0.78, 0.36,
0.02, 0.02, 0.02 0.02, 0.02, 0.02
], ],
borderColor: '#4bc0c0', borderColor: '#4bc0c0',
@ -1134,10 +1133,10 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'System', label: 'System',
data: [ data: [
0.01, 0.04, 0.22, 0.21, 0.01, 0.01, 0.04, 0.2,
0.22, 0.23, 0.22, 0.22, 0.21, 0.21, 0.21, 0.2,
0.22, 0.22, 0.21, 0.23, 0.21, 0.21, 0.21, 0.21,
0.22, 0.22, 0.06, 0.01, 0.21, 0.22, 0.21, 0.1,
0.02, 0.01, 0.01 0.02, 0.01, 0.01
], ],
borderColor: '#ff6384', borderColor: '#ff6384',
@ -1152,11 +1151,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'User', label: 'User',
data: [ data: [
0.02, 0.04, 0.32, 0.33, 0.02, 0.02, 0.37, 0.5,
0.34, 0.34, 0.34, 0.35, 0.5, 0.49, 0.48, 0.5,
0.34, 0.33, 0.34, 0.33, 0.49, 0.5, 0.49, 0.5,
0.34, 0.35, 0.11, 0.02, 0.49, 0.5, 0.41, 0.02,
0.02, 0.02, 0.02 0.03, 0.02, 0.02
], ],
borderColor: '#4bc0c0', borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0', backgroundColor: '#4bc0c0',
@ -1165,11 +1164,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'System', label: 'System',
data: [ data: [
0.03, 0.03, 0.16, 0.2, 0.02, 0.02, 0.33, 0.34,
0.19, 0.2, 0.21, 0.23, 0.34, 0.33, 0.32, 0.35,
0.23, 0.19, 0.22, 0.18, 0.34, 0.35, 0.36, 0.33,
0.23, 0.2, 0.07, 0.02, 0.32, 0.36, 0.33, 0.02,
0.02, 0.03, 0.03 0.02, 0.02, 0.02
], ],
borderColor: '#ff6384', borderColor: '#ff6384',
backgroundColor: '#ff6384', backgroundColor: '#ff6384',
@ -1186,24 +1185,24 @@ vus_max........................: 50 min=50 max=50
Iteration creation rate = **2/s** Iteration creation rate = **2/s**
```txt ```txt
checks.........................: 67.75% 35254 out of 52029 checks.........................: 100.00% 72770 out of 72770
data_received..................: 92 MB 1.0 MB/s data_received..................: 145 MB 1.6 MB/s
data_sent......................: 3.8 MB 42 kB/s data_sent......................: 5.5 MB 61 kB/s
dropped_iterations.............: 70 0.777606/s dropped_iterations.............: 66 0.733176/s
http_req_blocked...............: avg=23.08µs min=232ns med=s max=103.63ms p(90)=1.42µs p(95)=1.56µs http_req_blocked...............: avg=14.03µs min=198ns med=645ns max=144.52ms p(90)=1.11µs p(95)=1.27µs
http_req_connecting............: avg=977ns min=0s med=0s max=5.29ms p(90)=0s p(95)=0s http_req_connecting............: avg=629ns min=0s med=0s max=5.17ms p(90)=0s p(95)=0s
http_req_duration..............: avg=74.22ms min=3.71ms med=57.69ms max=366.12ms p(90)=157.54ms p(95)=180.86ms http_req_duration..............: avg=50.94ms min=3.78ms med=38.97ms max=384.02ms p(90)=107.46ms p(95)=136.98ms
{ expected_response:true }...: avg=68.87ms min=3.71ms med=52.82ms max=366.12ms p(90)=147.21ms p(95)=170.41ms { expected_response:true }...: avg=50.94ms min=3.78ms med=38.97ms max=384.02ms p(90)=107.46ms p(95)=136.98ms
http_req_failed................: 32.24% 16775 out of 52029 http_req_failed................: 0.00% 0 out of 72770
http_req_receiving.............: avg=237.94µs min=18.29µs med=130.97µs max=11.5ms p(90)=498.83µs p(95)=758.8µs http_req_receiving.............: avg=200.09µs min=18.28µs med=107.44µs max=18.54ms p(90)=399.04µs p(95)=632µs
http_req_sending...............: avg=116.57µs min=16.04µs med=104.78µs max=5.81ms p(90)=174.59µs p(95)=212.82µs http_req_sending...............: avg=86.57µs min=16.71µs med=73.65µs max=13.95ms p(90)=132.89µs p(95)=158.51µs
http_req_tls_handshaking.......: avg=19.29µs min=0s med=0s max=27.95ms p(90)=0s p(95)=0s http_req_tls_handshaking.......: avg=10.86µs min=0s med=0s max=28.74ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=73.86ms min=3.02ms med=57.38ms max=365.81ms p(90)=157.13ms p(95)=180.31ms http_req_waiting...............: avg=50.66ms min=3.64ms med=38.7ms max=383.81ms p(90)=107.11ms p(95)=136.61ms
http_reqs......................: 52029 577.972273/s http_reqs......................: 72770 808.381614/s
iteration_duration.............: avg=1m26s min=1m26s med=1m26s max=1m26s p(90)=1m26s p(95)=1m26s iteration_duration.............: avg=1m6s min=49.42s med=1m8s max=1m19s p(90)=1m18s p(95)=1m18s
iterations.....................: 3 0.033326/s iterations.....................: 18 0.199957/s
vus............................: 47 min=2 max=50 vus............................: 37 min=2 max=50
vus_max........................: 50 min=50 max=50 vus_max........................: 50 min=50 max=50
``` ```
{{< tabs >}} {{< tabs >}}
@ -1214,15 +1213,14 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'Req/s', label: 'Req/s',
data: [ data: [
34, 277, 442, 502, 566, 530, 612, 611, 593, 630, 577, 734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
606, 619, 529, 568, 567, 599, 606, 559, 567, 557, 613, 786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
604, 558, 617, 580, 607, 586, 581, 615, 564, 610, 612, 798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
576, 596, 561, 610, 602, 561, 616, 571, 612, 604, 577, 808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
586, 593, 595, 598, 566, 599, 592, 589, 585, 590, 603, 787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
596, 608, 580, 571, 580, 583, 598, 606, 541, 581, 575, 821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
595, 580, 591, 625, 577, 584, 601, 591, 585, 592, 620, 781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
598, 574, 598, 571, 599, 596, 592, 603, 590, 593, 578, 790, 791, 791, 830, 815, 835, 832, 583
599, 585, 113
] ]
} }
] ]
@ -1237,14 +1235,13 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'VUs', label: 'VUs',
data: [ data: [
2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 49, 48, 48, 48, 48, 47, 47, 46,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 46, 46, 45, 44, 44, 44, 44, 43, 43, 42, 42, 40,
50, 50, 48, 47, 47, 47 40, 39, 38, 37, 37, 37
] ]
} }
] ]
@ -1255,14 +1252,13 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'Duration (ms)', label: 'Duration (ms)',
data: [ data: [
28, 11, 11, 14, 16, 21, 21, 25, 28, 30, 36, 37, 29, 30, 37, 38, 39, 44, 43, 53, 49, 53, 58, 61,
40, 50, 50, 56, 55, 58, 64, 67, 73, 71, 75, 83, 61, 54, 57, 62, 62, 62, 61, 62, 61, 61, 65, 59,
79, 84, 83, 83, 88, 81, 89, 82, 81, 86, 83, 89, 60, 66, 59, 65, 61, 62, 62, 63, 65, 63, 60, 60,
81, 85, 87, 80, 88, 82, 81, 88, 84, 83, 84, 86, 61, 63, 59, 60, 62, 64, 65, 60, 63, 65, 59, 64,
86, 84, 83, 85, 86, 84, 81, 85, 81, 86, 88, 83, 59, 60, 61, 62, 62, 58, 59, 60, 53, 60, 57, 58,
86, 85, 83, 91, 86, 87, 86, 85, 85, 80, 84, 85, 57, 57, 61, 53, 50, 53, 51, 56, 54, 46, 54, 50,
83, 84, 85, 85, 82, 83, 85, 84, 84, 86, 84, 84, 51, 48, 47, 45, 45, 50
84, 82, 86, 81, 81, 79, 80
] ]
} }
] ]
@ -1276,11 +1272,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'User', label: 'User',
data: [ data: [
0.02, 0.03, 0.53, 0.76, 0.51, 0.71, 0.76, 0.7,
0.8, 0.81, 0.83, 0.83, 0.72, 0.72, 0.74, 0.77,
0.83, 0.83, 0.83, 0.83, 0.72, 0.73, 0.75, 0.74,
0.8, 0.75, 0.83, 0.8, 0.73, 0.78, 0.77, 0.66,
0.83, 0.8, 0.75 0.76, 0.6, 0.02
], ],
borderColor: '#4bc0c0', borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0', backgroundColor: '#4bc0c0',
@ -1289,11 +1285,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'System', label: 'System',
data: [ data: [
0.02, 0.02, 0.12, 0.17, 0.15, 0.2, 0.2, 0.18,
0.17, 0.17, 0.17, 0.17, 0.19, 0.18, 0.19, 0.2,
0.17, 0.17, 0.17, 0.17, 0.19, 0.19, 0.19, 0.19,
0.17, 0.16, 0.17, 0.17, 0.19, 0.19, 0.18, 0.17,
0.17, 0.17, 0.16 0.2, 0.16, 0.01
], ],
borderColor: '#ff6384', borderColor: '#ff6384',
backgroundColor: '#ff6384', backgroundColor: '#ff6384',
@ -1307,11 +1303,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'User', label: 'User',
data: [ data: [
0.02, 0.02, 0.17, 0.26, 0.42, 0.47, 0.48, 0.51,
0.24, 0.21, 0.22, 0.21, 0.51, 0.52, 0.49, 0.52,
0.22, 0.23, 0.22, 0.22, 0.52, 0.52, 0.51, 0.53,
0.22, 0.23, 0.22, 0.22, 0.51, 0.52, 0.49, 0.5,
0.23, 0.22, 0.22 0.52, 0.12, 0.03
], ],
borderColor: '#4bc0c0', borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0', backgroundColor: '#4bc0c0',
@ -1320,11 +1316,11 @@ vus_max........................: 50 min=50 max=50
{ {
label: 'System', label: 'System',
data: [ data: [
0.02, 0.02, 0.13, 0.21, 0.15, 0.29, 0.37, 0.44,
0.24, 0.26, 0.26, 0.22, 0.43, 0.46, 0.42, 0.47,
0.23, 0.26, 0.24, 0.26, 0.47, 0.45, 0.46, 0.46,
0.26, 0.25, 0.26, 0.26, 0.41, 0.46, 0.39, 0.39,
0.26, 0.26, 0.26 0.42, 0.11, 0.02
], ],
borderColor: '#ff6384', borderColor: '#ff6384',
backgroundColor: '#ff6384', backgroundColor: '#ff6384',
@ -2292,13 +2288,13 @@ Here are the final req/s results for each framework against PgSQL database.
borderColor: "#0f766e", borderColor: "#0f766e",
backgroundColor: "#0f766e", backgroundColor: "#0f766e",
data: [ data: [
30, 575, 674, 684, 617, 668, 634, 638, 647, 50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
621, 662, 661, 670, 659, 617, 672, 644, 653, 447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
623, 606, 663, 650, 634, 666, 625, 652, 650, 449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
671, 651, 617, 598, 620, 624, 626, 602, 657, 439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
646, 649, 650, 638, 669, 640, 639, 636, 628, 439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
636, 654, 651, 668, 643, 663, 645, 644, 618, 444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
575, 627, 622, 660, 643, 644, 637, 626, 413 444, 452, 432, 374, 1
], ],
}, },
{ {
@ -2389,15 +2385,14 @@ Here are the final req/s results for each framework against PgSQL database.
borderColor: "#0f766e", borderColor: "#0f766e",
backgroundColor: "#0f766e", backgroundColor: "#0f766e",
data: [ data: [
34, 277, 442, 502, 566, 530, 612, 611, 593, 630, 577, 734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
606, 619, 529, 568, 567, 599, 606, 559, 567, 557, 613, 786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
604, 558, 617, 580, 607, 586, 581, 615, 564, 610, 612, 798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
576, 596, 561, 610, 602, 561, 616, 571, 612, 604, 577, 808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
586, 593, 595, 598, 566, 599, 592, 589, 585, 590, 603, 787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
596, 608, 580, 571, 580, 583, 598, 606, 541, 581, 575, 821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
595, 580, 591, 625, 577, 584, 601, 591, 585, 592, 620, 781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
598, 574, 598, 571, 599, 596, 592, 603, 590, 593, 578, 790, 791, 791, 830, 815, 835, 832, 583
599, 585, 113
], ],
}, },
{ {

View File

@ -70,11 +70,8 @@
title: Vuetify Admin title: Vuetify Admin
date: 11/2020 date: 11/2020
repo: okami101/vuetify-admin repo: okami101/vuetify-admin
demo: https://va-demo.okami101.io/
docs: https://www.okami101.io/vuetify-admin
- name: laravel-rad-stack - name: laravel-rad-stack
title: Laravel RAD Stack title: Laravel RAD Stack
date: 10/2021 date: 10/2021
repo: adr1enbe4udou1n/laravel-rad-stack repo: adr1enbe4udou1n/laravel-rad-stack
demo: https://laravel-rad-stack.okami101.io/

View File

@ -74,8 +74,8 @@
{{ end }} {{ end }}
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center gap-4"> <div class="flex items-center gap-4">
<img src="/kube.png" width="30" height="30" alt="Kubernetes" <img src="/talos-logo.svg" width="30" height="30" alt="Talos Linux"
title="Run on K3s over Hetzner Cloud" /> title="Run on Talos Linux over Hetzner Cloud" />
</div> </div>
<div class="hidden lg:block"> <div class="hidden lg:block">
{{/* Copyright */}} {{/* Copyright */}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

3
static/talos-logo.svg Normal file
View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 203.74 226.05"><defs><style>.cls-1{fill:url(#linear-gradient);}.cls-2{fill:url(#linear-gradient-2);}.cls-3{fill:url(#linear-gradient-3);}.cls-4{fill:url(#linear-gradient-4);}.cls-5{fill:url(#linear-gradient-5);}</style><linearGradient id="linear-gradient" x1="101.85" y1="-15.19" x2="101.85" y2="237.81" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd200"/><stop offset="0.06" stop-color="#ffb500"/><stop offset="0.14" stop-color="#ff8c00"/><stop offset="0.21" stop-color="#ff7300"/><stop offset="0.26" stop-color="#ff6a00"/><stop offset="0.33" stop-color="#fc4f0e"/><stop offset="0.43" stop-color="#f92f1e"/><stop offset="0.51" stop-color="#f81b27"/><stop offset="0.57" stop-color="#f7142b"/><stop offset="0.68" stop-color="#df162e"/><stop offset="0.79" stop-color="#af1a38"/><stop offset="1" stop-color="#4b214c"/></linearGradient><linearGradient id="linear-gradient-2" x1="24.84" y1="-15.19" x2="24.84" y2="237.81" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-3" x1="178.9" y1="-15.19" x2="178.9" y2="237.81" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-4" x1="145.06" y1="-15.19" x2="145.06" y2="237.81" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-5" x1="58.64" y1="-15.19" x2="58.64" y2="237.81" xlink:href="#linear-gradient"/></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M101.89,226.05c2.85,0,5.67-.15,8.46-.35V.35c-2.8-.21-5.62-.35-8.48-.35s-5.7.14-8.52.35V225.69c2.81.21,5.64.35,8.5.36Z"/><path class="cls-2" d="M11.56,50.9,9.12,48.47A112.82,112.82,0,0,0,.2,63.61c29.42,29.89,32.52,44.31,32.48,49.14C32.57,125,17.58,144.21,0,162a113.69,113.69,0,0,0,8.84,15.15c1-1,1.95-1.92,2.92-2.9,25.37-25.54,37.77-45.61,37.92-61.38S37.36,77,11.56,50.9Z"/><path class="cls-3" d="M192,174.29l2.92,2.9A113.69,113.69,0,0,0,203.74,162c-17.57-17.83-32.56-37.09-32.68-49.29-.11-11.9,14.79-31.15,32.46-49.18a112.88,112.88,0,0,0-8.9-15.1l-2.44,2.43c-25.8,26.05-38.27,46.34-38.12,62S166.61,148.75,192,174.29Z"/><path class="cls-4" d="M140.68,112.83c0-22,9.81-58.58,24.92-93.15A113,113,0,0,0,150.45,11c-16.54,37.27-26.78,76.91-26.78,101.87,0,24.15,11.09,64.23,27.93,101.7a113,113,0,0,0,14.84-8.77C150.85,170.73,140.68,134.07,140.68,112.83Z"/><path class="cls-5" d="M80,112.83C80,87.74,69.35,47.88,53,11.07a112.76,112.76,0,0,0-14.93,8.64C53.21,54.26,63,90.85,63,112.83c0,21.23-10.17,57.88-25.76,92.91a113.66,113.66,0,0,0,14.84,8.77C68.94,177.05,80,137,80,112.83Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB