Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
a889a9f0b8 | |||
71fc44acc5 | |||
36cd9266b3 | |||
21ff0825cc | |||
c7cdd65f87 | |||
3b2adea40f | |||
8e82c90734 |
@ -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.
|
||||||
|
@ -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 | SQLAlchemy 2.0 |
|
| [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 |
|
||||||
|
|
||||||
@ -147,6 +147,7 @@ services:
|
|||||||
- DB_PASSWORD=okami
|
- DB_PASSWORD=okami
|
||||||
- DB_DATABASE=conduit_fastapi
|
- DB_DATABASE=conduit_fastapi
|
||||||
- JWT_PASSPHRASE=c2b344e1-1a20-47fc-9aef-55b0c0d568a7
|
- JWT_PASSPHRASE=c2b344e1-1a20-47fc-9aef-55b0c0d568a7
|
||||||
|
- UVICORN_WORKERS=2
|
||||||
networks:
|
networks:
|
||||||
- postgres_db
|
- postgres_db
|
||||||
- traefik_public
|
- traefik_public
|
||||||
@ -155,9 +156,9 @@ services:
|
|||||||
- traefik.enable=true
|
- traefik.enable=true
|
||||||
- traefik.http.routers.fastapi.entrypoints=websecure
|
- traefik.http.routers.fastapi.entrypoints=websecure
|
||||||
- traefik.http.services.fastapi.loadbalancer.server.port=8000
|
- traefik.http.services.fastapi.loadbalancer.server.port=8000
|
||||||
replicas: 4
|
replicas: 2
|
||||||
placement:
|
placement:
|
||||||
max_replicas_per_node: 2
|
max_replicas_per_node: 1
|
||||||
constraints:
|
constraints:
|
||||||
- node.labels.run == true
|
- node.labels.run == true
|
||||||
|
|
||||||
@ -1029,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% 39678 out of 39678
|
checks.........................: 100.00% 28764 out of 28764
|
||||||
data_received..................: 321 MB 5.2 MB/s
|
data_received..................: 234 MB 3.7 MB/s
|
||||||
data_sent......................: 3.4 MB 55 kB/s
|
data_sent......................: 2.6 MB 41 kB/s
|
||||||
dropped_iterations.............: 123 1.983368/s
|
dropped_iterations.............: 336 5.300365/s
|
||||||
http_req_blocked...............: avg=23.83µs min=213ns med=799ns max=113.17ms p(90)=1.41µs p(95)=1.59µ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.42µs min=0s med=0s max=6.53ms 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.21ms min=6.41ms med=54.17ms max=382.34ms p(90)=142.86ms p(95)=166.33ms
|
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.21ms min=6.41ms med=54.17ms max=382.34ms p(90)=142.86ms p(95)=166.33ms
|
{ 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 39678
|
http_req_failed................: 0.00% 0 out of 28764
|
||||||
http_req_receiving.............: avg=491.01µs min=23.44µs med=282.51µs max=20.46ms p(90)=1.01ms p(95)=1.6ms
|
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=106.95µs min=17.61µs med=85.46µs max=20.9ms p(90)=155.94µs p(95)=189.16µ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=18.91µs min=0s med=0s max=34.33ms 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.62ms min=6.23ms med=53.56ms max=381.34ms p(90)=142.08ms p(95)=165.56ms
|
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......................: 39678 639.805458/s
|
http_reqs......................: 28764 453.749133/s
|
||||||
iteration_duration.............: avg=3.56s min=1s med=3.68s max=5.11s p(90)=4.22s p(95)=4.38s
|
iteration_duration.............: avg=5.28s min=1.61s med=5.38s max=6.19s p(90)=5.71s p(95)=5.79s
|
||||||
iterations.....................: 778 12.545205/s
|
iterations.....................: 564 8.897042/s
|
||||||
vus............................: 3 min=3 max=50
|
vus............................: 17 min=15 max=50
|
||||||
vus_max........................: 50 min=50 max=50
|
vus_max........................: 50 min=50 max=50
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -1064,13 +1063,13 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'Req/s',
|
label: 'Req/s',
|
||||||
data: [
|
data: [
|
||||||
205, 686, 625, 657, 643, 684, 625, 652, 606,
|
50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
|
||||||
656, 610, 662, 672, 687, 647, 650, 636, 663,
|
447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
|
||||||
665, 617, 600, 621, 637, 655, 628, 681, 649,
|
449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
|
||||||
637, 662, 568, 669, 667, 630, 625, 630, 685,
|
439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
|
||||||
654, 647, 667, 631, 618, 656, 614, 695, 650,
|
439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
|
||||||
659, 629, 638, 646, 609, 642, 661, 647, 677,
|
444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
|
||||||
601, 662, 665, 608, 671, 628, 632, 629, 150
|
444, 452, 432, 374, 1
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1085,12 +1084,12 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'VUs',
|
label: 'VUs',
|
||||||
data: [
|
data: [
|
||||||
15, 18, 22, 30, 31, 36, 37, 41, 49, 50, 49, 50,
|
15, 27, 39, 50, 50, 50, 49, 48, 48, 50, 50, 50,
|
||||||
47, 48, 47, 48, 49, 47, 49, 44, 47, 48, 48, 50,
|
48, 46, 49, 50, 48, 49, 49, 50, 50, 50, 49, 48,
|
||||||
46, 46, 45, 50, 48, 47, 45, 50, 45, 49, 45, 45,
|
47, 48, 50, 47, 48, 50, 47, 50, 50, 48, 46, 49,
|
||||||
50, 47, 48, 50, 47, 50, 46, 47, 49, 47, 50, 47,
|
50, 50, 50, 49, 48, 50, 48, 49, 50, 50, 49, 44,
|
||||||
50, 46, 49, 46, 47, 49, 48, 49, 47, 47, 48, 49,
|
49, 49, 49, 48, 50, 48, 50, 50, 47, 50, 49, 50,
|
||||||
38, 3
|
45, 37, 17
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1101,12 +1100,13 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'Duration (ms)',
|
label: 'Duration (ms)',
|
||||||
data: [
|
data: [
|
||||||
19, 22, 29, 35, 44, 46, 57, 60, 71, 73, 80, 73,
|
21, 34, 77, 93, 102, 110, 107, 104, 105, 109,
|
||||||
73, 67, 76, 74, 73, 73, 70, 80, 76, 77, 76, 74,
|
112, 106, 105, 103, 106, 107, 106, 103, 103, 102,
|
||||||
77, 65, 70, 75, 73, 84, 68, 71, 80, 74, 79, 64,
|
108, 103, 102, 107, 103, 109, 106, 106, 107, 108,
|
||||||
74, 77, 69, 77, 79, 71, 78, 67, 75, 72, 77, 76,
|
112, 103, 103, 111, 105, 107, 105, 104, 107, 107,
|
||||||
74, 78, 71, 73, 74, 70, 78, 76, 71, 75, 71, 79,
|
115, 103, 108, 103, 107, 108, 105, 102, 101, 104,
|
||||||
71, 49, 17
|
112, 102, 105, 104, 105, 110, 104, 106, 108, 105,
|
||||||
|
111, 102, 85, 47, 8
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1120,11 +1120,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'User',
|
label: 'User',
|
||||||
data: [
|
data: [
|
||||||
0.01, 0.48, 0.69, 0.7,
|
0.02, 0.02, 0.1, 0.74,
|
||||||
0.69, 0.7, 0.7, 0.69,
|
0.78, 0.77, 0.79, 0.79,
|
||||||
0.71, 0.69, 0.68, 0.69,
|
0.78, 0.78, 0.78, 0.78,
|
||||||
0.69, 0.41, 0.01, 0.02,
|
0.78, 0.77, 0.78, 0.36,
|
||||||
0.01, 0.01
|
0.02, 0.02, 0.02
|
||||||
],
|
],
|
||||||
borderColor: '#4bc0c0',
|
borderColor: '#4bc0c0',
|
||||||
backgroundColor: '#4bc0c0',
|
backgroundColor: '#4bc0c0',
|
||||||
@ -1133,11 +1133,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'System',
|
label: 'System',
|
||||||
data: [
|
data: [
|
||||||
0.01, 0.16, 0.26, 0.26,
|
0.01, 0.01, 0.04, 0.2,
|
||||||
0.24, 0.24, 0.25, 0.25,
|
0.21, 0.21, 0.21, 0.2,
|
||||||
0.26, 0.25, 0.24, 0.24,
|
0.21, 0.21, 0.21, 0.21,
|
||||||
0.24, 0.16, 0.01, 0.02,
|
0.21, 0.22, 0.21, 0.1,
|
||||||
0.01, 0.01
|
0.02, 0.01, 0.01
|
||||||
],
|
],
|
||||||
borderColor: '#ff6384',
|
borderColor: '#ff6384',
|
||||||
backgroundColor: '#ff6384',
|
backgroundColor: '#ff6384',
|
||||||
@ -1151,11 +1151,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'User',
|
label: 'User',
|
||||||
data: [
|
data: [
|
||||||
0.02, 0.11, 0.46, 0.49,
|
0.02, 0.02, 0.37, 0.5,
|
||||||
0.48, 0.5, 0.5, 0.49,
|
0.5, 0.49, 0.48, 0.5,
|
||||||
0.48, 0.48, 0.47, 0.49,
|
0.49, 0.5, 0.49, 0.5,
|
||||||
0.48, 0.49, 0.05, 0.02,
|
0.49, 0.5, 0.41, 0.02,
|
||||||
0.02, 0.02
|
0.03, 0.02, 0.02
|
||||||
],
|
],
|
||||||
borderColor: '#4bc0c0',
|
borderColor: '#4bc0c0',
|
||||||
backgroundColor: '#4bc0c0',
|
backgroundColor: '#4bc0c0',
|
||||||
@ -1164,11 +1164,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'System',
|
label: 'System',
|
||||||
data: [
|
data: [
|
||||||
0.02, 0.06, 0.24, 0.35,
|
0.02, 0.02, 0.33, 0.34,
|
||||||
0.28, 0.35, 0.33, 0.3,
|
0.34, 0.33, 0.32, 0.35,
|
||||||
0.28, 0.32, 0.27, 0.34,
|
0.34, 0.35, 0.36, 0.33,
|
||||||
0.29, 0.3, 0.04, 0.02,
|
0.32, 0.36, 0.33, 0.02,
|
||||||
0.02, 0.02
|
0.02, 0.02, 0.02
|
||||||
],
|
],
|
||||||
borderColor: '#ff6384',
|
borderColor: '#ff6384',
|
||||||
backgroundColor: '#ff6384',
|
backgroundColor: '#ff6384',
|
||||||
@ -1185,23 +1185,23 @@ vus_max........................: 50 min=50 max=50
|
|||||||
Iteration creation rate = **2/s**
|
Iteration creation rate = **2/s**
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
checks.........................: 100.00% 82414 out of 82414
|
checks.........................: 100.00% 72770 out of 72770
|
||||||
data_received..................: 164 MB 1.8 MB/s
|
data_received..................: 145 MB 1.6 MB/s
|
||||||
data_sent......................: 6.1 MB 68 kB/s
|
data_sent......................: 5.5 MB 61 kB/s
|
||||||
dropped_iterations.............: 64 0.711058/s
|
dropped_iterations.............: 66 0.733176/s
|
||||||
http_req_blocked...............: avg=13.71µs min=208ns med=783ns max=143.23ms p(90)=1.39µ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=1.28µs min=0s med=0s max=25.89ms 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=43.46ms min=3.99ms med=24.29ms max=315.4ms p(90)=108.49ms p(95)=129.33ms
|
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=43.46ms min=3.99ms med=24.29ms max=315.4ms p(90)=108.49ms p(95)=129.33ms
|
{ 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................: 0.00% 0 out of 82414
|
http_req_failed................: 0.00% 0 out of 72770
|
||||||
http_req_receiving.............: avg=205.46µs min=16.8µs med=103.34µs max=23.42ms p(90)=394.08µs p(95)=591.95µ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=94.88µs min=17.56µs med=78.81µs max=14.63ms p(90)=143.76µs p(95)=171.26µ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=9.75µs min=0s med=0s max=29.89ms 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=43.16ms min=23.62µs med=23.97ms max=315.14ms p(90)=108.17ms p(95)=129.04ms
|
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......................: 82414 915.642582/s
|
http_reqs......................: 72770 808.381614/s
|
||||||
iteration_duration.............: avg=1m5s min=44.88s med=1m10s max=1m14s p(90)=1m13s p(95)=1m13s
|
iteration_duration.............: avg=1m6s min=49.42s med=1m8s max=1m19s p(90)=1m18s p(95)=1m18s
|
||||||
iterations.....................: 36 0.39997/s
|
iterations.....................: 18 0.199957/s
|
||||||
vus............................: 21 min=2 max=50
|
vus............................: 37 min=2 max=50
|
||||||
vus_max........................: 50 min=50 max=50
|
vus_max........................: 50 min=50 max=50
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -1213,15 +1213,14 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'Req/s',
|
label: 'Req/s',
|
||||||
data: [
|
data: [
|
||||||
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
|
734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
|
||||||
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
|
786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
|
||||||
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
|
798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
|
||||||
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
|
808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
|
||||||
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
|
787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
|
||||||
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
|
821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
|
||||||
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
|
781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
|
||||||
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
|
790, 791, 791, 830, 815, 835, 832, 583
|
||||||
880, 884, 538
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1236,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, 49, 49, 50, 50, 50, 50, 50, 50,
|
50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49,
|
||||||
49, 49, 49, 49, 48, 47, 46, 46, 46, 45, 45, 44,
|
50, 50, 50, 49, 49, 48, 48, 48, 48, 47, 47, 46,
|
||||||
43, 43, 43, 42, 41, 40, 40, 40, 38, 36, 35, 34,
|
46, 46, 45, 44, 44, 44, 44, 43, 43, 42, 42, 40,
|
||||||
32, 30, 29, 26, 25, 21
|
40, 39, 38, 37, 37, 37
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1254,14 +1252,13 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'Duration (ms)',
|
label: 'Duration (ms)',
|
||||||
data: [
|
data: [
|
||||||
20, 14, 12, 9, 10, 11, 12, 14, 16, 19, 21, 23,
|
29, 30, 37, 38, 39, 44, 43, 53, 49, 53, 58, 61,
|
||||||
26, 27, 32, 32, 36, 38, 38, 44, 41, 45, 46, 47,
|
61, 54, 57, 62, 62, 62, 61, 62, 61, 61, 65, 59,
|
||||||
54, 52, 51, 55, 54, 55, 54, 55, 54, 55, 53, 54,
|
60, 66, 59, 65, 61, 62, 62, 63, 65, 63, 60, 60,
|
||||||
49, 53, 51, 56, 50, 52, 53, 51, 55, 50, 53, 53,
|
61, 63, 59, 60, 62, 64, 65, 60, 63, 65, 59, 64,
|
||||||
49, 53, 53, 50, 53, 53, 57, 50, 52, 49, 52, 54,
|
59, 60, 61, 62, 62, 58, 59, 60, 53, 60, 57, 58,
|
||||||
54, 52, 50, 53, 54, 49, 49, 47, 49, 49, 47, 45,
|
57, 57, 61, 53, 50, 53, 51, 56, 54, 46, 54, 50,
|
||||||
50, 47, 47, 45, 44, 44, 41, 45, 42, 41, 39, 36,
|
51, 48, 47, 45, 45, 50
|
||||||
38, 31, 33, 32, 31, 28, 24
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1275,11 +1272,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'User',
|
label: 'User',
|
||||||
data: [
|
data: [
|
||||||
0.01, 0.24, 0.65, 0.68,
|
0.51, 0.71, 0.76, 0.7,
|
||||||
0.66, 0.69, 0.68, 0.68,
|
0.72, 0.72, 0.74, 0.77,
|
||||||
0.68, 0.69, 0.69, 0.71,
|
0.72, 0.73, 0.75, 0.74,
|
||||||
0.69, 0.68, 0.7, 0.7,
|
0.73, 0.78, 0.77, 0.66,
|
||||||
0.69, 0.68, 0.65
|
0.76, 0.6, 0.02
|
||||||
],
|
],
|
||||||
borderColor: '#4bc0c0',
|
borderColor: '#4bc0c0',
|
||||||
backgroundColor: '#4bc0c0',
|
backgroundColor: '#4bc0c0',
|
||||||
@ -1288,11 +1285,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'System',
|
label: 'System',
|
||||||
data: [
|
data: [
|
||||||
0.01, 0.08, 0.23, 0.26,
|
0.15, 0.2, 0.2, 0.18,
|
||||||
0.25, 0.28, 0.27, 0.25,
|
0.19, 0.18, 0.19, 0.2,
|
||||||
0.25, 0.25, 0.25, 0.27,
|
0.19, 0.19, 0.19, 0.19,
|
||||||
0.28, 0.26, 0.27, 0.28,
|
0.19, 0.19, 0.18, 0.17,
|
||||||
0.27, 0.24, 0.24
|
0.2, 0.16, 0.01
|
||||||
],
|
],
|
||||||
borderColor: '#ff6384',
|
borderColor: '#ff6384',
|
||||||
backgroundColor: '#ff6384',
|
backgroundColor: '#ff6384',
|
||||||
@ -1306,11 +1303,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'User',
|
label: 'User',
|
||||||
data: [
|
data: [
|
||||||
0.02, 0.03, 0.24, 0.24,
|
0.42, 0.47, 0.48, 0.51,
|
||||||
0.25, 0.26, 0.28, 0.28,
|
0.51, 0.52, 0.49, 0.52,
|
||||||
0.29, 0.28, 0.29, 0.28,
|
0.52, 0.52, 0.51, 0.53,
|
||||||
0.27, 0.28, 0.29, 0.28,
|
0.51, 0.52, 0.49, 0.5,
|
||||||
0.28, 0.27, 0.28
|
0.52, 0.12, 0.03
|
||||||
],
|
],
|
||||||
borderColor: '#4bc0c0',
|
borderColor: '#4bc0c0',
|
||||||
backgroundColor: '#4bc0c0',
|
backgroundColor: '#4bc0c0',
|
||||||
@ -1319,11 +1316,11 @@ vus_max........................: 50 min=50 max=50
|
|||||||
{
|
{
|
||||||
label: 'System',
|
label: 'System',
|
||||||
data: [
|
data: [
|
||||||
0.02, 0.02, 0.13, 0.16,
|
0.15, 0.29, 0.37, 0.44,
|
||||||
0.2, 0.23, 0.23, 0.24,
|
0.43, 0.46, 0.42, 0.47,
|
||||||
0.26, 0.26, 0.26, 0.23,
|
0.47, 0.45, 0.46, 0.46,
|
||||||
0.23, 0.25, 0.24, 0.25,
|
0.41, 0.46, 0.39, 0.39,
|
||||||
0.25, 0.23, 0.23
|
0.42, 0.11, 0.02
|
||||||
],
|
],
|
||||||
borderColor: '#ff6384',
|
borderColor: '#ff6384',
|
||||||
backgroundColor: '#ff6384',
|
backgroundColor: '#ff6384',
|
||||||
@ -2291,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: [
|
||||||
205, 686, 625, 657, 643, 684, 625, 652, 606,
|
50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
|
||||||
656, 610, 662, 672, 687, 647, 650, 636, 663,
|
447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
|
||||||
665, 617, 600, 621, 637, 655, 628, 681, 649,
|
449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
|
||||||
637, 662, 568, 669, 667, 630, 625, 630, 685,
|
439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
|
||||||
654, 647, 667, 631, 618, 656, 614, 695, 650,
|
439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
|
||||||
659, 629, 638, 646, 609, 642, 661, 647, 677,
|
444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
|
||||||
601, 662, 665, 608, 671, 628, 632, 629, 150
|
444, 452, 432, 374, 1
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2388,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: [
|
||||||
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
|
734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
|
||||||
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
|
786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
|
||||||
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
|
798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
|
||||||
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
|
808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
|
||||||
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
|
787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
|
||||||
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
|
821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
|
||||||
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
|
781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
|
||||||
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
|
790, 791, 791, 830, 815, 835, 832, 583
|
||||||
880, 884, 538
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -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/
|
|
||||||
|
@ -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 */}}
|
||||||
|
BIN
static/kube.png
BIN
static/kube.png
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
3
static/talos-logo.svg
Normal file
3
static/talos-logo.svg
Normal 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 |
Submodule themes/congo updated: 9dbf87b450...15b06a8615
Reference in New Issue
Block a user