Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
a889a9f0b8 | |||
71fc44acc5 | |||
36cd9266b3 | |||
21ff0825cc | |||
c7cdd65f87 | |||
3b2adea40f | |||
8e82c90734 | |||
ea7529c443 | |||
d83d53180d |
File diff suppressed because it is too large
Load Diff
@ -18,7 +18,7 @@ I can develop proper API design following [**DDD / Hexa**](https://en.wikipedia.
|
||||
I encourage `TDD` or at least proper **integration tests** on any backend frameworks, following **AAA** aka *Arrange Act Assert* principle :
|
||||
|
||||
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*
|
||||
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*
|
||||
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) for *.NET Core*
|
||||
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*
|
||||
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks
|
||||
|
||||
|
@ -8,7 +8,5 @@ Main packages involved :
|
||||
* [Fluent Validation](https://fluentvalidation.net/) for strongly typed validation
|
||||
* [dotnet-format](https://github.com/dotnet/format) as official formatter
|
||||
* [xUnit.net](https://xunit.net/) as framework test
|
||||
* [Fluent Assertions](https://fluentassertions.com/) for strongly typed assertions within the API
|
||||
* [Respawn](https://github.com/jbogard/Respawn) as for optimal integration tests isolation
|
||||
* [Bogus](https://github.com/bchavez/Bogus) for strongly typed fake data generator
|
||||
* [Bullseye](https://github.com/adamralph/bullseye) as a nice CLI publisher tool with dependency graph
|
||||
|
@ -9,7 +9,7 @@ We'll be comparing the read performance of 6 Web APIs frameworks, sharing the sa
|
||||
{{< /lead >}}
|
||||
|
||||
{{< 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 >}}
|
||||
|
||||
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 |
|
||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------------- |
|
||||
| [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 |
|
||||
| [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 |
|
||||
| [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 |
|
||||
| [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 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 |
|
||||
| [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_DATABASE=conduit_fastapi
|
||||
- JWT_PASSPHRASE=c2b344e1-1a20-47fc-9aef-55b0c0d568a7
|
||||
- UVICORN_WORKERS=2
|
||||
networks:
|
||||
- postgres_db
|
||||
- traefik_public
|
||||
@ -155,9 +156,9 @@ services:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.fastapi.entrypoints=websecure
|
||||
- traefik.http.services.fastapi.loadbalancer.server.port=8000
|
||||
replicas: 4
|
||||
replicas: 2
|
||||
placement:
|
||||
max_replicas_per_node: 2
|
||||
max_replicas_per_node: 1
|
||||
constraints:
|
||||
- node.labels.run == true
|
||||
|
||||
@ -1029,30 +1030,28 @@ Huge gap in performance against Laravel Octane here, about twice better ! Withou
|
||||
|
||||
### 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
|
||||
|
||||
Iteration creation rate = **15/s**
|
||||
|
||||
```txt
|
||||
checks.........................: 100.00% 39678 out of 39678
|
||||
data_received..................: 321 MB 5.2 MB/s
|
||||
data_sent......................: 3.4 MB 55 kB/s
|
||||
dropped_iterations.............: 123 1.983368/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_connecting............: avg=1.42µs min=0s med=0s max=6.53ms 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
|
||||
{ expected_response:true }...: avg=69.21ms min=6.41ms med=54.17ms max=382.34ms p(90)=142.86ms p(95)=166.33ms
|
||||
http_req_failed................: 0.00% 0 out of 39678
|
||||
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_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_tls_handshaking.......: avg=18.91µs min=0s med=0s max=34.33ms 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_reqs......................: 39678 639.805458/s
|
||||
iteration_duration.............: avg=3.56s min=1s med=3.68s max=5.11s p(90)=4.22s p(95)=4.38s
|
||||
iterations.....................: 778 12.545205/s
|
||||
vus............................: 3 min=3 max=50
|
||||
checks.........................: 100.00% 28764 out of 28764
|
||||
data_received..................: 234 MB 3.7 MB/s
|
||||
data_sent......................: 2.6 MB 41 kB/s
|
||||
dropped_iterations.............: 336 5.300365/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.66µs min=0s med=0s max=3.75ms p(90)=0s p(95)=0s
|
||||
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=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 28764
|
||||
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=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=35.6µs min=0s med=0s max=28.74ms p(90)=0s p(95)=0s
|
||||
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......................: 28764 453.749133/s
|
||||
iteration_duration.............: avg=5.28s min=1.61s med=5.38s max=6.19s p(90)=5.71s p(95)=5.79s
|
||||
iterations.....................: 564 8.897042/s
|
||||
vus............................: 17 min=15 max=50
|
||||
vus_max........................: 50 min=50 max=50
|
||||
```
|
||||
|
||||
@ -1064,13 +1063,13 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'Req/s',
|
||||
data: [
|
||||
205, 686, 625, 657, 643, 684, 625, 652, 606,
|
||||
656, 610, 662, 672, 687, 647, 650, 636, 663,
|
||||
665, 617, 600, 621, 637, 655, 628, 681, 649,
|
||||
637, 662, 568, 669, 667, 630, 625, 630, 685,
|
||||
654, 647, 667, 631, 618, 656, 614, 695, 650,
|
||||
659, 629, 638, 646, 609, 642, 661, 647, 677,
|
||||
601, 662, 665, 608, 671, 628, 632, 629, 150
|
||||
50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
|
||||
447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
|
||||
449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
|
||||
439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
|
||||
439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
|
||||
444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
|
||||
444, 452, 432, 374, 1
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1085,12 +1084,12 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'VUs',
|
||||
data: [
|
||||
15, 18, 22, 30, 31, 36, 37, 41, 49, 50, 49, 50,
|
||||
47, 48, 47, 48, 49, 47, 49, 44, 47, 48, 48, 50,
|
||||
46, 46, 45, 50, 48, 47, 45, 50, 45, 49, 45, 45,
|
||||
50, 47, 48, 50, 47, 50, 46, 47, 49, 47, 50, 47,
|
||||
50, 46, 49, 46, 47, 49, 48, 49, 47, 47, 48, 49,
|
||||
38, 3
|
||||
15, 27, 39, 50, 50, 50, 49, 48, 48, 50, 50, 50,
|
||||
48, 46, 49, 50, 48, 49, 49, 50, 50, 50, 49, 48,
|
||||
47, 48, 50, 47, 48, 50, 47, 50, 50, 48, 46, 49,
|
||||
50, 50, 50, 49, 48, 50, 48, 49, 50, 50, 49, 44,
|
||||
49, 49, 49, 48, 50, 48, 50, 50, 47, 50, 49, 50,
|
||||
45, 37, 17
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1101,12 +1100,13 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'Duration (ms)',
|
||||
data: [
|
||||
19, 22, 29, 35, 44, 46, 57, 60, 71, 73, 80, 73,
|
||||
73, 67, 76, 74, 73, 73, 70, 80, 76, 77, 76, 74,
|
||||
77, 65, 70, 75, 73, 84, 68, 71, 80, 74, 79, 64,
|
||||
74, 77, 69, 77, 79, 71, 78, 67, 75, 72, 77, 76,
|
||||
74, 78, 71, 73, 74, 70, 78, 76, 71, 75, 71, 79,
|
||||
71, 49, 17
|
||||
21, 34, 77, 93, 102, 110, 107, 104, 105, 109,
|
||||
112, 106, 105, 103, 106, 107, 106, 103, 103, 102,
|
||||
108, 103, 102, 107, 103, 109, 106, 106, 107, 108,
|
||||
112, 103, 103, 111, 105, 107, 105, 104, 107, 107,
|
||||
115, 103, 108, 103, 107, 108, 105, 102, 101, 104,
|
||||
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',
|
||||
data: [
|
||||
0.01, 0.48, 0.69, 0.7,
|
||||
0.69, 0.7, 0.7, 0.69,
|
||||
0.71, 0.69, 0.68, 0.69,
|
||||
0.69, 0.41, 0.01, 0.02,
|
||||
0.01, 0.01
|
||||
0.02, 0.02, 0.1, 0.74,
|
||||
0.78, 0.77, 0.79, 0.79,
|
||||
0.78, 0.78, 0.78, 0.78,
|
||||
0.78, 0.77, 0.78, 0.36,
|
||||
0.02, 0.02, 0.02
|
||||
],
|
||||
borderColor: '#4bc0c0',
|
||||
backgroundColor: '#4bc0c0',
|
||||
@ -1133,11 +1133,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'System',
|
||||
data: [
|
||||
0.01, 0.16, 0.26, 0.26,
|
||||
0.24, 0.24, 0.25, 0.25,
|
||||
0.26, 0.25, 0.24, 0.24,
|
||||
0.24, 0.16, 0.01, 0.02,
|
||||
0.01, 0.01
|
||||
0.01, 0.01, 0.04, 0.2,
|
||||
0.21, 0.21, 0.21, 0.2,
|
||||
0.21, 0.21, 0.21, 0.21,
|
||||
0.21, 0.22, 0.21, 0.1,
|
||||
0.02, 0.01, 0.01
|
||||
],
|
||||
borderColor: '#ff6384',
|
||||
backgroundColor: '#ff6384',
|
||||
@ -1151,11 +1151,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'User',
|
||||
data: [
|
||||
0.02, 0.11, 0.46, 0.49,
|
||||
0.48, 0.5, 0.5, 0.49,
|
||||
0.48, 0.48, 0.47, 0.49,
|
||||
0.48, 0.49, 0.05, 0.02,
|
||||
0.02, 0.02
|
||||
0.02, 0.02, 0.37, 0.5,
|
||||
0.5, 0.49, 0.48, 0.5,
|
||||
0.49, 0.5, 0.49, 0.5,
|
||||
0.49, 0.5, 0.41, 0.02,
|
||||
0.03, 0.02, 0.02
|
||||
],
|
||||
borderColor: '#4bc0c0',
|
||||
backgroundColor: '#4bc0c0',
|
||||
@ -1164,11 +1164,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'System',
|
||||
data: [
|
||||
0.02, 0.06, 0.24, 0.35,
|
||||
0.28, 0.35, 0.33, 0.3,
|
||||
0.28, 0.32, 0.27, 0.34,
|
||||
0.29, 0.3, 0.04, 0.02,
|
||||
0.02, 0.02
|
||||
0.02, 0.02, 0.33, 0.34,
|
||||
0.34, 0.33, 0.32, 0.35,
|
||||
0.34, 0.35, 0.36, 0.33,
|
||||
0.32, 0.36, 0.33, 0.02,
|
||||
0.02, 0.02, 0.02
|
||||
],
|
||||
borderColor: '#ff6384',
|
||||
backgroundColor: '#ff6384',
|
||||
@ -1185,23 +1185,23 @@ vus_max........................: 50 min=50 max=50
|
||||
Iteration creation rate = **2/s**
|
||||
|
||||
```txt
|
||||
checks.........................: 100.00% 82414 out of 82414
|
||||
data_received..................: 164 MB 1.8 MB/s
|
||||
data_sent......................: 6.1 MB 68 kB/s
|
||||
dropped_iterations.............: 64 0.711058/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_connecting............: avg=1.28µs min=0s med=0s max=25.89ms 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
|
||||
{ expected_response:true }...: avg=43.46ms min=3.99ms med=24.29ms max=315.4ms p(90)=108.49ms p(95)=129.33ms
|
||||
http_req_failed................: 0.00% 0 out of 82414
|
||||
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_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_tls_handshaking.......: avg=9.75µs min=0s med=0s max=29.89ms 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_reqs......................: 82414 915.642582/s
|
||||
iteration_duration.............: avg=1m5s min=44.88s med=1m10s max=1m14s p(90)=1m13s p(95)=1m13s
|
||||
iterations.....................: 36 0.39997/s
|
||||
vus............................: 21 min=2 max=50
|
||||
checks.........................: 100.00% 72770 out of 72770
|
||||
data_received..................: 145 MB 1.6 MB/s
|
||||
data_sent......................: 5.5 MB 61 kB/s
|
||||
dropped_iterations.............: 66 0.733176/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=629ns min=0s med=0s max=5.17ms p(90)=0s p(95)=0s
|
||||
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=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 72770
|
||||
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=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=10.86µs min=0s med=0s max=28.74ms p(90)=0s p(95)=0s
|
||||
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......................: 72770 808.381614/s
|
||||
iteration_duration.............: avg=1m6s min=49.42s med=1m8s max=1m19s p(90)=1m18s p(95)=1m18s
|
||||
iterations.....................: 18 0.199957/s
|
||||
vus............................: 37 min=2 max=50
|
||||
vus_max........................: 50 min=50 max=50
|
||||
```
|
||||
|
||||
@ -1213,15 +1213,14 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'Req/s',
|
||||
data: [
|
||||
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
|
||||
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
|
||||
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
|
||||
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
|
||||
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
|
||||
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
|
||||
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
|
||||
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
|
||||
880, 884, 538
|
||||
734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
|
||||
786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
|
||||
798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
|
||||
808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
|
||||
787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
|
||||
821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
|
||||
781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
|
||||
790, 791, 791, 830, 815, 835, 832, 583
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1236,14 +1235,13 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'VUs',
|
||||
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,
|
||||
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,
|
||||
49, 49, 49, 49, 48, 47, 46, 46, 46, 45, 45, 44,
|
||||
43, 43, 43, 42, 41, 40, 40, 40, 38, 36, 35, 34,
|
||||
32, 30, 29, 26, 25, 21
|
||||
50, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49,
|
||||
50, 50, 50, 49, 49, 48, 48, 48, 48, 47, 47, 46,
|
||||
46, 46, 45, 44, 44, 44, 44, 43, 43, 42, 42, 40,
|
||||
40, 39, 38, 37, 37, 37
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1254,14 +1252,13 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'Duration (ms)',
|
||||
data: [
|
||||
20, 14, 12, 9, 10, 11, 12, 14, 16, 19, 21, 23,
|
||||
26, 27, 32, 32, 36, 38, 38, 44, 41, 45, 46, 47,
|
||||
54, 52, 51, 55, 54, 55, 54, 55, 54, 55, 53, 54,
|
||||
49, 53, 51, 56, 50, 52, 53, 51, 55, 50, 53, 53,
|
||||
49, 53, 53, 50, 53, 53, 57, 50, 52, 49, 52, 54,
|
||||
54, 52, 50, 53, 54, 49, 49, 47, 49, 49, 47, 45,
|
||||
50, 47, 47, 45, 44, 44, 41, 45, 42, 41, 39, 36,
|
||||
38, 31, 33, 32, 31, 28, 24
|
||||
29, 30, 37, 38, 39, 44, 43, 53, 49, 53, 58, 61,
|
||||
61, 54, 57, 62, 62, 62, 61, 62, 61, 61, 65, 59,
|
||||
60, 66, 59, 65, 61, 62, 62, 63, 65, 63, 60, 60,
|
||||
61, 63, 59, 60, 62, 64, 65, 60, 63, 65, 59, 64,
|
||||
59, 60, 61, 62, 62, 58, 59, 60, 53, 60, 57, 58,
|
||||
57, 57, 61, 53, 50, 53, 51, 56, 54, 46, 54, 50,
|
||||
51, 48, 47, 45, 45, 50
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1275,11 +1272,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'User',
|
||||
data: [
|
||||
0.01, 0.24, 0.65, 0.68,
|
||||
0.66, 0.69, 0.68, 0.68,
|
||||
0.68, 0.69, 0.69, 0.71,
|
||||
0.69, 0.68, 0.7, 0.7,
|
||||
0.69, 0.68, 0.65
|
||||
0.51, 0.71, 0.76, 0.7,
|
||||
0.72, 0.72, 0.74, 0.77,
|
||||
0.72, 0.73, 0.75, 0.74,
|
||||
0.73, 0.78, 0.77, 0.66,
|
||||
0.76, 0.6, 0.02
|
||||
],
|
||||
borderColor: '#4bc0c0',
|
||||
backgroundColor: '#4bc0c0',
|
||||
@ -1288,11 +1285,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'System',
|
||||
data: [
|
||||
0.01, 0.08, 0.23, 0.26,
|
||||
0.25, 0.28, 0.27, 0.25,
|
||||
0.25, 0.25, 0.25, 0.27,
|
||||
0.28, 0.26, 0.27, 0.28,
|
||||
0.27, 0.24, 0.24
|
||||
0.15, 0.2, 0.2, 0.18,
|
||||
0.19, 0.18, 0.19, 0.2,
|
||||
0.19, 0.19, 0.19, 0.19,
|
||||
0.19, 0.19, 0.18, 0.17,
|
||||
0.2, 0.16, 0.01
|
||||
],
|
||||
borderColor: '#ff6384',
|
||||
backgroundColor: '#ff6384',
|
||||
@ -1306,11 +1303,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'User',
|
||||
data: [
|
||||
0.02, 0.03, 0.24, 0.24,
|
||||
0.25, 0.26, 0.28, 0.28,
|
||||
0.29, 0.28, 0.29, 0.28,
|
||||
0.27, 0.28, 0.29, 0.28,
|
||||
0.28, 0.27, 0.28
|
||||
0.42, 0.47, 0.48, 0.51,
|
||||
0.51, 0.52, 0.49, 0.52,
|
||||
0.52, 0.52, 0.51, 0.53,
|
||||
0.51, 0.52, 0.49, 0.5,
|
||||
0.52, 0.12, 0.03
|
||||
],
|
||||
borderColor: '#4bc0c0',
|
||||
backgroundColor: '#4bc0c0',
|
||||
@ -1319,11 +1316,11 @@ vus_max........................: 50 min=50 max=50
|
||||
{
|
||||
label: 'System',
|
||||
data: [
|
||||
0.02, 0.02, 0.13, 0.16,
|
||||
0.2, 0.23, 0.23, 0.24,
|
||||
0.26, 0.26, 0.26, 0.23,
|
||||
0.23, 0.25, 0.24, 0.25,
|
||||
0.25, 0.23, 0.23
|
||||
0.15, 0.29, 0.37, 0.44,
|
||||
0.43, 0.46, 0.42, 0.47,
|
||||
0.47, 0.45, 0.46, 0.46,
|
||||
0.41, 0.46, 0.39, 0.39,
|
||||
0.42, 0.11, 0.02
|
||||
],
|
||||
borderColor: '#ff6384',
|
||||
backgroundColor: '#ff6384',
|
||||
@ -2291,13 +2288,13 @@ Here are the final req/s results for each framework against PgSQL database.
|
||||
borderColor: "#0f766e",
|
||||
backgroundColor: "#0f766e",
|
||||
data: [
|
||||
205, 686, 625, 657, 643, 684, 625, 652, 606,
|
||||
656, 610, 662, 672, 687, 647, 650, 636, 663,
|
||||
665, 617, 600, 621, 637, 655, 628, 681, 649,
|
||||
637, 662, 568, 669, 667, 630, 625, 630, 685,
|
||||
654, 647, 667, 631, 618, 656, 614, 695, 650,
|
||||
659, 629, 638, 646, 609, 642, 661, 647, 677,
|
||||
601, 662, 665, 608, 671, 628, 632, 629, 150
|
||||
50, 371, 331, 391, 475, 450, 464, 464, 467, 450,
|
||||
447, 467, 467, 455, 451, 458, 463, 485, 470, 476,
|
||||
449, 481, 485, 461, 476, 442, 455, 474, 454, 456,
|
||||
439, 478, 472, 436, 473, 453, 463, 471, 456, 455,
|
||||
439, 470, 456, 473, 465, 459, 468, 471, 475, 474,
|
||||
444, 484, 469, 466, 468, 448, 477, 449, 443, 482,
|
||||
444, 452, 432, 374, 1
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -2388,15 +2385,14 @@ Here are the final req/s results for each framework against PgSQL database.
|
||||
borderColor: "#0f766e",
|
||||
backgroundColor: "#0f766e",
|
||||
data: [
|
||||
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
|
||||
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
|
||||
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
|
||||
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
|
||||
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
|
||||
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
|
||||
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
|
||||
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
|
||||
880, 884, 538
|
||||
734, 921, 803, 822, 870, 809, 859, 751, 834, 825,
|
||||
786, 779, 811, 928, 869, 802, 802, 802, 832, 802,
|
||||
798, 824, 768, 845, 825, 762, 860, 758, 812, 813,
|
||||
808, 783, 772, 797, 831, 835, 799, 781, 844, 824,
|
||||
787, 801, 769, 819, 799, 774, 837, 776, 837, 826,
|
||||
821, 776, 791, 816, 838, 792, 900, 795, 815, 807,
|
||||
781, 819, 729, 848, 861, 839, 872, 762, 796, 902,
|
||||
790, 791, 791, 830, 815, 835, 832, 583
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -70,11 +70,8 @@
|
||||
title: Vuetify Admin
|
||||
date: 11/2020
|
||||
repo: okami101/vuetify-admin
|
||||
demo: https://va-demo.okami101.io/
|
||||
docs: https://www.okami101.io/vuetify-admin
|
||||
|
||||
- name: laravel-rad-stack
|
||||
title: Laravel RAD Stack
|
||||
date: 10/2021
|
||||
repo: adr1enbe4udou1n/laravel-rad-stack
|
||||
demo: https://laravel-rad-stack.okami101.io/
|
||||
|
@ -74,8 +74,8 @@
|
||||
{{ end }}
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center gap-4">
|
||||
<img src="/kube.png" width="30" height="30" alt="Kubernetes"
|
||||
title="Run on K3s over Hetzner Cloud" />
|
||||
<img src="/talos-logo.svg" width="30" height="30" alt="Talos Linux"
|
||||
title="Run on Talos Linux over Hetzner Cloud" />
|
||||
</div>
|
||||
<div class="hidden lg:block">
|
||||
{{/* 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: 475798497c...15b06a8615
Reference in New Issue
Block a user