Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@nanaya
Copy link
Collaborator

@nanaya nanaya commented Oct 4, 2022

That's a lot of attributes. Also: Achievement, Country, UserAchievement.

There aren't many endpoints which uses a lot of users at once so I'm not sure how much the overall impact is.

Transforming 100k user json:
Before: 10.270894126
After: 5.953822692

Script (tinker):

$u = App\Models\User::find(8);
$t = new App\Transformers\UserCompactTransformer;
json_item($u, $t);
$start = hrtime(true);
for ($i=0;$i<100000;$i++) {
    json_item($u, $t);
};
echo ((hrtime(true) - $start)/1000000000).PHP_EOL;

Which translates to minor speed improvement on user card:

Before:

Run 1:   4979 requests in 10.04s, 9.82MB read
Run 2:   5121 requests in 10.05s, 10.10MB read
Run 3:   5175 requests in 10.14s, 10.21MB read
Run 4:   5140 requests in 10.04s, 10.14MB read
Run 5:   5108 requests in 10.04s, 10.07MB read
Run 6:   5077 requests in 10.05s, 10.01MB read
Run 7:   5150 requests in 10.04s, 10.16MB read
Run 8:   4847 requests in 10.05s, 9.56MB read
Run 9:   5042 requests in 10.04s, 9.94MB read
Run 10:   5183 requests in 10.14s, 10.22MB read
Final run:
Running 10s test @ https://on.nanaya.pro/users/2/card
  4 threads and 12 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    26.64ms   29.09ms 380.39ms   98.00%
    Req/Sec   128.22     17.99   151.00     71.25%
  5127 requests in 10.04s, 10.11MB read
Requests/sec:    510.65
Transfer/sec:      1.01MB

After:

Run 1:   5237 requests in 10.04s, 10.33MB read
Run 2:   5095 requests in 10.04s, 10.05MB read
Run 3:   5372 requests in 10.05s, 10.59MB read
Run 4:   5402 requests in 10.05s, 10.65MB read
Run 5:   5360 requests in 10.05s, 10.57MB read
Run 6:   5399 requests in 10.13s, 10.65MB read
Run 7:   5370 requests in 10.05s, 10.59MB read
Run 8:   5038 requests in 10.04s, 9.94MB read
Run 9:   5400 requests in 10.14s, 10.65MB read
Run 10:   5078 requests in 10.13s, 10.01MB read
Final run:
Running 10s test @ https://on.nanaya.pro/users/2/card
  4 threads and 12 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    27.71ms   36.76ms 430.88ms   97.39%
    Req/Sec   131.34     18.81   161.00     76.50%
  5253 requests in 10.04s, 10.36MB read
Requests/sec:    523.08
Transfer/sec:      1.03MB

And for user profile:

Before:

Run 1:   360 requests in 10.12s, 109.25MB read
Run 2:   357 requests in 10.13s, 108.34MB read
Run 3:   351 requests in 10.11s, 106.52MB read
Run 4:   333 requests in 10.10s, 101.06MB read
Run 5:   346 requests in 10.12s, 105.00MB read
Run 6:   348 requests in 10.12s, 105.61MB read
Run 7:   335 requests in 10.03s, 101.66MB read
Run 8:   347 requests in 10.11s, 105.31MB read
Run 9:   344 requests in 10.10s, 104.40MB read
Run 10:   330 requests in 10.02s, 100.15MB read
Final run:
Running 10s test @ https://on.nanaya.pro/users/124493
  4 threads and 12 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   355.15ms   43.97ms 708.34ms   94.58%
    Req/Sec     9.07      4.61    20.00     69.19%
  332 requests in 10.12s, 100.75MB read
Requests/sec:     32.81
Transfer/sec:      9.96MB

Barely affects anything (if at all) with just update to user model:

Run 1:   356 requests in 10.09s, 108.05MB read
Run 2:   352 requests in 10.09s, 106.83MB read
Run 3:   346 requests in 10.10s, 105.00MB read
Run 4:   360 requests in 10.10s, 109.25MB read
Run 5:   357 requests in 10.11s, 108.34MB read
Run 6:   359 requests in 10.17s, 108.95MB read
Run 7:   358 requests in 10.10s, 108.65MB read
Run 8:   357 requests in 10.08s, 108.34MB read
Run 9:   358 requests in 10.09s, 108.65MB read
Run 10:   348 requests in 10.09s, 105.63MB read
Final run:
Running 10s test @ https://on.nanaya.pro/users/124493
  4 threads and 12 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   334.53ms   38.34ms 619.49ms   95.54%
    Req/Sec     9.24      3.88    20.00     73.41%
  359 requests in 10.22s, 108.95MB read
Requests/sec:     35.14
Transfer/sec:     10.67MB

But slightly faster with getAttribute for achievement/user achievement as well:

Run 1:   384 requests in 10.11s, 104.82MB read
Run 2:   392 requests in 10.12s, 107.01MB read
Run 3:   368 requests in 10.09s, 100.46MB read
Run 4:   382 requests in 10.12s, 104.28MB read
Run 5:   382 requests in 10.10s, 104.28MB read
Run 6:   384 requests in 10.11s, 104.82MB read
Run 7:   384 requests in 10.10s, 104.82MB read
Run 8:   389 requests in 10.11s, 106.19MB read
Run 9:   360 requests in 10.13s, 98.27MB read
Run 10:   381 requests in 10.09s, 104.00MB read
Final run:
Running 10s test @ https://on.nanaya.pro/users/124493
  4 threads and 12 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   313.92ms   34.46ms 593.71ms   95.80%
    Req/Sec     9.80      4.02    20.00     75.37%
  381 requests in 10.11s, 104.00MB read
Requests/sec:     37.69
Transfer/sec:     10.29MB

@notbakaneko notbakaneko merged commit 18dc33f into ppy:master Oct 6, 2022
@nanaya nanaya deleted the explicit-user-attributes branch January 10, 2023 08:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants