GraphQL Tokyo #18 発表資料
https://www.meetup.com/ja-JP/graphql-tokyo/events/286913987/
@mtsmfmGraphQL Rubyベンチマーク
View Slide
松島 史秋Backend engineer at AutifyGitHub, Twitter @mtsmfm
https://autify.com/careers
https://www.meetup.com/ja-JP/GraphQL-Tokyo/
https://ninirb.github.io
大事なことは最初に- GraphQL Ruby v2.0.13 は 1000 要素あるときに 1 フィールド足すと 15 ms くらい処理時間が増える (2.60GHz CPU)- v2.0.13 は v1.5.15 と比べて倍くらい遅くなっている- つまり倍くらい速くなる余地がある気がする
GraphQL Rubyなんか遅い?
https://speakerdeck.com/mtsmfm/make-graphql-ruby-faster-a-bit
前回得たこと、気になったこと- 1000 要素 4 フィールドで 60ms- 実際 4 フィールドしかないことはほぼない- 1 フィールドにつきどれくらいかかる?- 増えれば増えるほど遅くなる?- リリースごとだんだん遅くなってる?
ベンチマーク内容type Article {field0: String!field1: String!...fieldN: String!}type Query {articles: [Article!]!}query {articles {field0, field1, ..., fieldN}}
ベンチマーク内容type Article {field0: String!field1: String!...fieldN: String!}type Query {articles: [Article!]!}query {articles {field0, field1, ..., fieldN}}要素数フィールド数
ベンチマーク内容- Query 文字列を渡して Ruby の Hash オブジェクトが返ってくるまでの時間- 30 秒を超えるまでループして処理時間と回数を記録- Ruby 2.7.6- 古い GraphQL Ruby を動かすため 2 系
ベンチマーク環境- GitHub Actions (ubuntu-latest)- Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz- 2 コア- 具体的なスペックは引きによって変わることがあるかも- 全部 1 実行で回している- https://github.com/mtsmfm/graphql-ruby-benchmark
1 フィールドにつきどれくらいかかる?
1 フィールドにつきどれくらいかかる?- 1000 要素のとき、だいたい 15 ms くらい- 前回 1000 要素 4 フィールド 60 ms だったのでそれっぽい (マシンは違うけど)- フィールド数が少ないと 1 フィールドあたりの時間が多い- おそらくクエリのパースとかの分- 100 フィールド以降はほぼ変わらない
リリースごとだんだん遅くなってる?
https://github.com/mtsmfm/graphql-ruby-benchmark/blob/eaf93fb7ef10753d571eff13b635cf33167dcc03/graphql.rb全バージョンで動くコードを書いた
GraphQL Ruby のバージョンごとの速度- 1.1 と 1.5 は 1.8 以降の倍くらい速かった- 最初期が最速ではなかった
ご清聴ありがとうございました- GraphQL Ruby v2.0.13 は 1000 要素あるときに 1 フィールド足すと 15 ms くらい処理時間が増える (2.60GHz CPU)- v2.0.13 は v1.5.15 と比べて倍くらい遅くなっている- つまり倍くらい速くなる余地がある気がする
CreditsBackground pattern from Toptal Subtle Patternshttps://www.toptal.com/designers/subtlepatterns/