{"id":20122839,"url":"https://github.com/freaky/ruby-http-duel","last_synced_at":"2025-09-16T17:00:20.082Z","repository":{"id":200539980,"uuid":"705752601","full_name":"Freaky/ruby-http-duel","owner":"Freaky","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-01T14:52:28.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-13T07:32:06.719Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Freaky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-16T16:15:26.000Z","updated_at":"2023-10-16T16:16:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"7c4652cf-4619-4cb6-86a9-ea0947660e59","html_url":"https://github.com/Freaky/ruby-http-duel","commit_stats":null,"previous_names":["freaky/ruby-http-duel"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freaky%2Fruby-http-duel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freaky%2Fruby-http-duel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freaky%2Fruby-http-duel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Freaky%2Fruby-http-duel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Freaky","download_url":"https://codeload.github.com/Freaky/ruby-http-duel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241566163,"owners_count":19983258,"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","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":[],"created_at":"2024-11-13T19:41:25.271Z","updated_at":"2025-09-16T17:00:15.049Z","avatar_url":"https://github.com/Freaky.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HTTPX vs Manticore/Curb\n\nA trivial \"benchmark\" of Ruby HTTP clients [httpx] and [manticore] (JRuby)\nor [curb] (MRI) against a simple echo server.\n\n## Usage\n\n```\n$ bundle install\n$ cargo build --release\n$ ./bench.sh\n```\n\n## Results\n\n### JRuby\n\n```\nEnvironment: FreeBSD 13.2-RELEASE-p3 releng/13.2-n254633-a1c915cc75c1 GENERIC\n JRuby:      9.4.3.0\n JVM:        17.0.8+7-1\n JRUBY_OPTS: -J-Xmx16G -J-XX:+UseG1GC -J-XX:+UseStringDeduplication\n HTTPX:      1.0.2\n Manticore:  0.9.1\n\nTest: echo of 96 bytes\n URI:      http://127.0.0.1:3000/echo\n Requests: 5000\n--------------------------------------\n\nRehearsal ---------------------------------------------\nhttpx      28.234375   0.578125  28.812500 ( 10.974081)\nmanticore   2.914062   0.070312   2.984375 (  0.724888)\n----------------------------------- total: 31.796875sec\n\n                user     system      total        real\nhttpx      23.132812   0.328125  23.460938 ( 15.659571)\nmanticore   2.117188   0.062500   2.179688 (  0.427454)\n```\n\n### Ruby 3.3.0-preview2\n\n#### Interpreted\n\n```\nEnvironment: FreeBSD 13.2-RELEASE-p3 releng/13.2-n254633-a1c915cc75c1 GENERIC\n Ruby:       3.3.0\n Curb:       8.4.0\n HTTPX:      1.0.2\n Test: echo of 96 bytes\n URI:      http://127.0.0.1:3000/echo\n Requests: 5000\n--------------------------------------\n\nRehearsal -----------------------------------------\nhttpx   5.092907   0.103471   5.196378 (  5.201477)\ncurb    0.148671   0.040084   0.188755 (  0.216876)\n-------------------------------- total: 5.385133sec\n\n            user     system      total        real\nhttpx  11.811634   0.078473  11.890107 ( 11.917484)\ncurb    0.153671   0.015715   0.169386 (  0.197445)\n```\n\n#### YJIT\n\n```\nRehearsal -----------------------------------------\nhttpx   3.125992   0.109961   3.235953 (  3.241366)\ncurb    0.134511   0.039316   0.173827 (  0.201959)\n-------------------------------- total: 3.409780sec\n\nuser     system      total        real\nhttpx   7.082681   0.094486   7.177167 (  7.185236)\ncurb    0.120101   0.047045   0.167146 (  0.196331)\n```\n\nSomething odd going on with httpx times, it's consistently better during warmup?\n\n[httpx]: https://rubygems.org/gems/httpx\n[manticore]: https://rubygems.org/gems/manticore\n[curb]: https://rubygems.org/gems/curb\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreaky%2Fruby-http-duel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreaky%2Fruby-http-duel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreaky%2Fruby-http-duel/lists"}