{"id":13879751,"url":"https://github.com/the-benchmarker/graphql-benchmarks","last_synced_at":"2025-08-09T22:12:38.613Z","repository":{"id":47642936,"uuid":"174204181","full_name":"the-benchmarker/graphql-benchmarks","owner":"the-benchmarker","description":"GraphQL benchmarks using the-benchmarker framework.","archived":false,"fork":false,"pushed_at":"2021-08-19T23:13:58.000Z","size":6235,"stargazers_count":56,"open_issues_count":2,"forks_count":7,"subscribers_count":8,"default_branch":"develop","last_synced_at":"2025-05-01T14:44:34.633Z","etag":null,"topics":["benchmark","graphql","http","measurement","performance","web"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/the-benchmarker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-06T19:06:34.000Z","updated_at":"2024-04-12T10:24:49.000Z","dependencies_parsed_at":"2022-08-28T14:52:35.153Z","dependency_job_id":null,"html_url":"https://github.com/the-benchmarker/graphql-benchmarks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/the-benchmarker/graphql-benchmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-benchmarker%2Fgraphql-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-benchmarker%2Fgraphql-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-benchmarker%2Fgraphql-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-benchmarker%2Fgraphql-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/the-benchmarker","download_url":"https://codeload.github.com/the-benchmarker/graphql-benchmarks/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-benchmarker%2Fgraphql-benchmarks/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269646013,"owners_count":24452845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","graphql","http","measurement","performance","web"],"created_at":"2024-08-06T08:02:31.539Z","updated_at":"2025-08-09T22:12:38.589Z","avatar_url":"https://github.com/the-benchmarker.png","language":"Ruby","readme":"# Which is the fastest GraphQL?\n\nIt's all about GraphQL server benchmarking across many languages.\n\nBenchmarks cover maximum throughput and normal use latency. For a more\ndetailed description of the methodology used, the how, and the why see the\nbottom of this page.\n\n## Results\n\n\u003c!-- Result from here --\u003e\n### Top 5 Ranking\n|     | Rate | Latency | Verbosity |\n|:---:| ---- | ------- | --------- |\n| :one: | agoo-c (c) | agoo (ruby) | fastify-mercurius (javascript) |\n| :two: | ggql-i (go) | agoo-c (c) | express-graphql (javascript) |\n| :three: | ggql (go) | ggql-i (go) | koa-koa-graphql (javascript) |\n| :four: | agoo (ruby) | ggql (go) | apollo-server-fastify (javascript) |\n| :five: | fastify-mercurius (javascript) | koa-koa-graphql (javascript) | apollo-server-express (javascript) |\n\n#### Parameters\n- Last updated: 2021-08-19\n- OS: Linux (version: 5.7.1-050701-generic, arch: x86_64)\n- CPU Cores: 12\n- Connections: 1000\n- Duration: 20 seconds\n\n| [Rate](rates.md) | [Latency](latency.md) | [Verbosity](verbosity.md) | [README](README.md) |\n| ---------------- | --------------------- | ------------------------- | ------------------- |\n\u003c!-- Result till here --\u003e\n\n## Requirements\n\n+ [Ruby](https://www.ruby-lang.org) for tooling\n+ [Docker](https://www.docker.com) as **frameworks** are `isolated` into _containers_\n+ [perfer](https://github.com/ohler55/perfer) the benchmarking tool, `\u003e= 1.5.3`\n+ [Oj](https://github.com/ohler55/oj) is needed by the benchmarking Ruby script, `\u003e= 3.7`\n+ [RSpec](https://rubygems.org/gems/rspec) is needed for testing\n\n## Usage\n\n+ Install all dependencies, Ruby, Docker, Perfer, Oj, and RSpec.\n\n+ Build containers\n\n\u003e build all\n\n```sh\nbuild.rb\n```\n\n\u003e build just named targets\n\n```sh\nbuild.rb [target] [target] ...\n```\n\n+ Runs the tests (optional)\n\n```sh\nrspec spec.rb\n```\n\n+ Run the benchmarks\n\n\u003e frameworks is an options list of frameworks or languages run (example: ruby agoo-c)\n\n```sh\nbenchmarker.rb [frameworks...]\n```\n\n## Methodology\n\nPerformance of a framework includes latency and maximum number of requests\nthat can be handled in a span of time. The assumption is that users of a\nframework will choose to run at somewhat less that fully loaded. Running fully\nloaded would leave no room for a spike in usage. With that in mind, the\nmaximum number of requests per second will serve as the upper limit for a\nframework.\n\nLatency tends to vary significantly not only radomly but according to the\nload. A typical latency versus throughput curve starts at some low-load value\nand stays fairly flat in the normal load region until some inflection\npoint. At the inflection point until the maximum throughput the latency\nincreases.\n\n```\n |                                                                  *\n |                                                              ****\n |                                                          ****\n |                                                      ****\n |******************************************************\n +---------------------------------------------------------------------\n  ^               \\             /                       ^           ^\n  low-load          normal-load                         inflection  max\n```\n\nThese benchmarks show the normal-load latency as that is what most users will\nsee when using a service. Most deployments do not run at near maximum\nthroughput but try to stay in the normal-load are but are prepared for spike\nin usage. To accomdate slower frameworks a value of 1000 request per second is\nused for determing the median latency. The assumption is that a rate of 1000\nrequest per second falls in the normal range for most if not all frameworks\ntested.\n\nThe `perfer` benchmarking tool is used for these reasons:\n\n- A rate can be specified for latency determination.\n- JSON output makes parsing output easier.\n- Fewer threads are needed by `perfer` leaving more for the application being benchmarked.\n- `perfer` is faster than `wrk` albeit only slightly\n\n## How to Contribute\n\nIn any way you want ...\n\n+ Provide a Pull Request for a framework addition\n+ Report a bug (on any implementation)\n+ Suggest an idea\n+ [More details](CONTRIBUTING.md)\n\nAll ideas are welcome.\n\n## Contributors\n\n- [Peter Ohler](https://github.com/ohler55) - Author, maintainer\n- [the-benchmarker/web-frameworks](https://github.com/the-benchmarker/web-frameworks) - the original cloned source that has been modified for this repository\n","funding_links":[],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-benchmarker%2Fgraphql-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthe-benchmarker%2Fgraphql-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-benchmarker%2Fgraphql-benchmarks/lists"}