Slide 1

Slide 1 text

@mtsmfm GraphQL Ruby ベンチマーク

Slide 2

Slide 2 text

松島 史秋 Backend engineer at Autify GitHub, Twitter @mtsmfm

Slide 3

Slide 3 text

https://autify.com/careers

Slide 4

Slide 4 text

https://www.meetup.com/ja-JP/GraphQL-Tokyo/

Slide 5

Slide 5 text

https://ninirb.github.io

Slide 6

Slide 6 text

大事なことは最初に - GraphQL Ruby v2.0.13 は 1000 要素あるとき に 1 フィールド足すと 15 ms くらい処理時間が 増える (2.60GHz CPU) - v2.0.13 は v1.5.15 と比べて倍くらい遅くなって いる - つまり倍くらい速くなる余地がある気がする

Slide 7

Slide 7 text

GraphQL Ruby なんか遅い?

Slide 8

Slide 8 text

https://speakerdeck.com/mtsmfm/make-graphql-ruby-faster-a-bit

Slide 9

Slide 9 text

https://speakerdeck.com/mtsmfm/make-graphql-ruby-faster-a-bit

Slide 10

Slide 10 text

前回得たこと、気になったこと - 1000 要素 4 フィールドで 60ms - 実際 4 フィールドしかないことはほぼない - 1 フィールドにつきどれくらいかかる? - 増えれば増えるほど遅くなる? - リリースごとだんだん遅くなってる?

Slide 11

Slide 11 text

ベンチマーク内容 type Article { field0: String! field1: String! ... fieldN: String! } type Query { articles: [Article!]! } query { articles { field0, field1, ..., fieldN } }

Slide 12

Slide 12 text

ベンチマーク内容 type Article { field0: String! field1: String! ... fieldN: String! } type Query { articles: [Article!]! } query { articles { field0, field1, ..., fieldN } } 要素数 フィールド数

Slide 13

Slide 13 text

ベンチマーク内容 - Query 文字列を渡して Ruby の Hash オブジェ クトが返ってくるまでの時間 - 30 秒を超えるまでループして処理時間と回数を 記録 - Ruby 2.7.6 - 古い GraphQL Ruby を動かすため 2 系

Slide 14

Slide 14 text

ベンチマーク環境 - GitHub Actions (ubuntu-latest) - Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz - 2 コア - 具体的なスペックは引きによって変わることがあるかも - 全部 1 実行で回している - https://github.com/mtsmfm/graphql-ruby-benchmark

Slide 15

Slide 15 text

1 フィールドに つきどれくらい かかる?

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

1 フィールドにつきどれくらいかかる? - 1000 要素のとき、だいたい 15 ms くらい - 前回 1000 要素 4 フィールド 60 ms だったのでそれっ ぽい (マシンは違うけど) - フィールド数が少ないと 1 フィールドあたりの時 間が多い - おそらくクエリのパースとかの分 - 100 フィールド以降はほぼ変わらない

Slide 18

Slide 18 text

リリースごと だんだん遅く なってる?

Slide 19

Slide 19 text

https://github.com/mtsmfm/graphql-ruby-benchmark/blob/eaf93fb7ef10753d571eff13b635cf33167dcc03/graphql.rb 全バージョンで動くコードを書いた

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

GraphQL Ruby のバージョンごとの速度 - 1.1 と 1.5 は 1.8 以降の倍くらい速かった - 最初期が最速ではなかった

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

ご清聴ありがとうございました - GraphQL Ruby v2.0.13 は 1000 要素あるとき に 1 フィールド足すと 15 ms くらい処理時間が 増える (2.60GHz CPU) - v2.0.13 は v1.5.15 と比べて倍くらい遅くなって いる - つまり倍くらい速くなる余地がある気がする

Slide 25

Slide 25 text

Credits Background pattern from Toptal Subtle Patterns https://www.toptal.com/designers/subtlepatterns/