GithubHelp home page GithubHelp logo

graphql-crystal / benchmarks Goto Github PK

View Code? Open in Web Editor NEW
83.0 2.0 30.0 823 KB

GraphQL server benchmarks

License: MIT License

Dockerfile 1.16% Crystal 14.05% JavaScript 11.22% Rust 7.23% Go 5.32% C# 0.70% Python 3.36% Scala 3.25% Nim 3.26% Ruby 3.85% Elixir 39.09% Nix 2.16% D 5.33%

benchmarks's Introduction

GraphQL server benchmarks

Graphql server benchmarks in many languages. Pull requests welcome, please read CONTRIBUTING.md

All servers implement a simple schema:

type Query {
  hello: String!
}

The returned string is always world.

The API is served over HTTP using a common web server and load tested using bombardier.

Results

Name Language Server Latency avg Requests
static-rust Rust Actix Web 1.88ms 110kps
graphql-crystal Crystal Kemal 3.34ms 60kps
gqlgen Go net/http 4.37ms 46kps
async-graphql Rust Actix Web 4.79ms 42kps
Juniper Rust Actix Web 5.43ms 37kps
Hot Chocolate C# ASP.NET 9.94ms 20kps
Mercurius Node.js Fastify 10.73ms 19kps
graphql-go Go net/http 11.45ms 17kps
GraphqlD D Vibe.d 12.40ms 16kps
agoo Ruby/C agoo 13.01ms 15kps
graphql-yoga Node.js http 16.08ms 13kps
graphql-jit Node.js http 21.31ms 9.4kps
Absinthe Elixir Phoenix 25.47ms 7.8kps
Hono Bun HonoJS 26.89ms 7.4kps
apollo Node.js Express 35.25ms 5.6kps
graphql-ruby Ruby Puma 48.30ms 5.3kps
nim-graphql Nim Chronos 57.11ms 3.6kps
graphql-js Node.js http 57.00ms 3.5kps
Sangria Scala Akka HTTP 112.40ms 1.8kps
Graphene Python gunicorn 128.63ms 1.5kps
Strawberry Python gunicorn 132.70ms 1.5kps

benchmarks's People

Contributors

ardatan avatar cyrusmsk avatar github-actions[bot] avatar jgillich avatar kylerush avatar renovate-bot avatar renovate[bot] avatar tak1n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

benchmarks's Issues

Use codespaces for Benchmarks

Currently the benchmarks run on GitHub actions which doesn't guarantee consistent cpu across runs. Its better to integrate it witg codespaces or setup a dedicated ci machine with consistent cpu.

Warmup servers prior to executing benchmarks

Hi there ๐Ÿ‘‹ I'm looking to add another Scala GraphQL library to the benchmarks. When I first looked at the current results I was a bit surprised that Sangria (Scala) was performing this badly. After looking at the benchmarking script, it seems that the servers are not warmed up prior to being benchmarked.

The JVM has a notoriously bad cold-start performance (see related post here), so any GraphQL libraries from JVM languages (Java, Kotlin, Scala, etc.) being benchmarked will show as having very poor performance if the server is not warmed up prior to measuring request latencies.

A very simple way to warmup the servers is to execute this line twice, discarding the results from the first invocation. Ideally, the first invocation should be with a smaller number of connections to prevent overwhelming the server as it warms up. I believe that this might also help resolve #217.

I'm happy to create a PR if you agree with this approach

GraphQL Yoga results

Hi!
This is Arda from @the-guild-org. I am one of maintainers of GraphQL Yoga, and we recently introduces a lot of performance improvements on GraphQL Yoga. I'd like to kindly ask if you can update the results based on the latest version of GraphQL Yoga's node package.

Thanks!

Benchmarks don't run

/nix/store/j2gmfdd29cp3rcvghmn1a5kgcnmf8myp-binutils-2.40/bin/ld: cannot find -lpcre2-8 (this usually means you need to install the development package for libpcre2-8): No such file or directory

Carry over to reality

Hi!

First of all thanks a lot for these benchmarks ๐Ÿค—

When running my own with very small payloads - like say{ "data": { "user": { "name": "John Cena" } } } - I can see a 7.5x difference between graphql-js and async-graphql, which checks out pretty well with the benchmarks provided here.

However when I go ahead and create larger payloads (attached below) by creating new objects/structs like one would in a real world scenario (where they'd come from an ORM or whatever), the difference melts down to about 3.5x - which is still considerable, but largely different to the 7.5x (small) or even your 10x (your benchmark, even smaller) payloads. Do you think it might make sense to make the example payload larger to be more like what you'd see in production (at least partially, for lists), or am I overlooking something? Could it be that with bigger payloads more connections must be kept alive and streaming takes longer, so the advantages of faster execution are diminished? Something isn't quite clicking for me.

Traffic is about 86 MBps (for the bigger payload) which is under the 4 Gbps or 500 MBps network out the Linode Dedicated 4GB can do by quite a margin, so network shouldn't be the bottleneck. Bombardier is run on a separate Linode Shared 16GB so that shouldn't bottleneck either. Tests where run using both internet and VLAN.

Edit: In my benchmarks, the small response was 144 Bytes and the large one 11.3 KB, so ~80x difference.

Larger Payload

{
    "data": {
        "todos": [
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            },
            {
                "title": "Lorem ipsum dolor sit amet",
                "description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
                "watchers": [
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    },
                    {
                        "name": "John Cena"
                    }
                ]
            }
        ]
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.