{"id":18864106,"url":"https://github.com/jzillmann/jmh-visualizer","last_synced_at":"2025-04-07T10:27:13.693Z","repository":{"id":11720245,"uuid":"70356792","full_name":"jzillmann/jmh-visualizer","owner":"jzillmann","description":"Visually explore your JMH Benchmarks","archived":false,"fork":false,"pushed_at":"2023-08-14T00:05:14.000Z","size":6210,"stargazers_count":306,"open_issues_count":17,"forks_count":24,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-03-31T08:12:12.266Z","etag":null,"topics":["benchmark","chart","jmh","visualization"],"latest_commit_sha":null,"homepage":"https://jmh.morethan.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jzillmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2016-10-08T20:52:19.000Z","updated_at":"2025-03-13T21:03:46.000Z","dependencies_parsed_at":"2024-11-08T04:39:56.887Z","dependency_job_id":"efaab913-9f09-4bde-9f9a-581902044a68","html_url":"https://github.com/jzillmann/jmh-visualizer","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzillmann%2Fjmh-visualizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzillmann%2Fjmh-visualizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzillmann%2Fjmh-visualizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzillmann%2Fjmh-visualizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jzillmann","download_url":"https://codeload.github.com/jzillmann/jmh-visualizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247634492,"owners_count":20970533,"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":["benchmark","chart","jmh","visualization"],"created_at":"2024-11-08T04:39:40.422Z","updated_at":"2025-04-07T10:27:13.668Z","avatar_url":"https://github.com/jzillmann.png","language":"JavaScript","funding_links":["https://www.paypal.me/JohannesZillmann/5.4"],"categories":[],"sub_categories":[],"readme":"# JMH Visualizer\n\nVisually explore your [JMH](http://openjdk.java.net/projects/code-tools/jmh/) Benchmarks! Online version at http://jmh.morethan.io!\n\nComes with 2 companion projects:\n- [Gradle plugin](https://github.com/jzillmann/gradle-jmh-report)\n- [Jenkins plugin](https://github.com/jenkinsci/jmh-report-plugin)\n\n\n## Features\n\n- Serverless architecture - All happens locally in your browser\n- Visualize the benchmarks of a [single run](http://jmh.morethan.io?example=single) (one JSON file) grouped by benchmark class\n  - Vertical bar-chart with score and score error \n  - Link to the original JSON\n  - Show individual runs as tooltip\n- Compare the benchmarks of [2 runs](http://jmh.morethan.io?example=two) (two JSON files) grouped by benchmark class\n  - Summary of noteable changes\n  - Vertical bar-chart from -100% to 100%\n  - Link to the original JSON\n  - Show score and error of both runs in tooltip\n- Compare the benchmarks of [multiple runs](http://jmh.morethan.io?example=multi) (n JSON files) grouped by benchmark class\n  - Summary of noteable changes\n  - Line chart\n  - Show score and error on hover\n- Visualize secondary metrics like '·gc.alloc.rate'\n- Focus on subselection of charts with synced axis scales\n- Load benchmarks from external url or gists\n\n\n## Major Changes\n\n- **Mar 2021** - 0.9.3 Support [Gists containing multiple files](https://github.com/jzillmann/jmh-visualizer/issues/33)\n- **Aug 2018** - 0.9 Couple of [user requested features](https://github.com/jzillmann/jmh-visualizer/milestone/6?closed=1)\n- **Jul 2018** - 0.8 Revamp Summary Page + Chart transitions\n- **Jan 2018** - 0.7.3 External URL/Gist support\n- **Okt 2017** - 0.7 Multi-Run support\n- **Aug 2017** - 0.6 Layout change \u0026 Summary support\n- **Jul 2017** - 0.5 Focussing of benchmarks\n- **May 2017** - 0.4 Secondary Metrics support\n- **Apr 2017** - 0.3 Error Bars \u0026 Params support\n- **Nov 2016** - 0.2: Add 2 run compare view\n- **Okt 2016** - 0.1: Initial Release\n\n\n## Tips \u0026 Tricks\n\nWhile this app will visualize any valid JMH JSON you throw at it, you can write your benchmarks in a way that make the visualization much more enjoyable...\n\n- Put those benchmarks in a single class which you most likely wanne compare to each other\n- On the other hand, don't put to much stuff in a single class/chart (since readability will suffer)\n- Don't mix incompatible benchmark styles into one class (like mixing average and single shot is ok, but mixing avarage and throughput doesn't make much sense)\n- Sensibly design your package structure, your class name and you methods names, those are reflected in the auto-generated charts\n- Keep method names short but meaningful\n- The method names reflect initial sort, so if you have benchmarks called 'with1Threads, with10Threads' naming them 'with01Thread, with10Thread' will display nicer\n\n\n## Parameter reference\n\n| Name | Values | What you can do with it? | Example |\n| ------------- | ------------- | ------------- | ------------- |\n| source | $url | Load a single benchmark result from the provided URL | http://jmh.morethan.io?source=https://gist.githubusercontent.com/jzillmann/7d23b2382911cc434754a23773b06598/raw/1bcad4bb64624d8a2be15114a4eee4c406c3ae95/string-concatenation_jdk7.json |\n| sources | $url1,$url2,.. | Load multiple benchmark results from the provided URLs | http://jmh.morethan.io?sources=https://gist.githubusercontent.com/jzillmann/7d23b2382911cc434754a23773b06598/raw/1bcad4bb64624d8a2be15114a4eee4c406c3ae95/string-concatenation_jdk7.json,https://gist.githubusercontent.com/jzillmann/866d39d43b264f507a67368f2313baca/raw/d0ae1502e8c493e6814c83f2df345fecb763c078/string-concatenation_jdk8.json |\n| gist | $gistId | Load a single benchmark result from the provided gist | http://jmh.morethan.io?gist=7d23b2382911cc434754a23773b06598 |\n| gist (multi-file)| $gistId | Load multiple benchmark results from the provided gist | http://jmh.morethan.io?gist=4c9e282fff30b5fa455ae2496acf4e05 |\n| gists | $gistId1,$gistId2,... | Load multiple benchmark results from the provided gists | http://jmh.morethan.io?gists=7d23b2382911cc434754a23773b06598,866d39d43b264f507a67368f2313baca |\n| topBar | oneOf['default', 'off, 'my custom headline'] | Control the header | [Off](http://jmh.morethan.io?gist=7d23b2382911cc434754a23773b06598\u0026topBar=off), [Custom Headline](http://jmh.morethan.io/?gist=7d23b2382911cc434754a23773b06598\u0026topBar=Custom%20Headline) |\n\n\n## Contribute\n\nUse the [issue tracker](https://github.com/jzillmann/jmh-visualizer/issues) and/or open [pull requests](https://github.com/jzillmann/jmh-visualizer/pulls)!\n\n#### Useful Commands\n\n- ```npm install``` Download all necessary npm packages\n- ```npm run lint``` Lint the javascript files\n- ```npm run test``` Run tests\n- ```npm run check``` Run Lint \u0026 Test\n- ```npm run watch``` Continuously build the project\n- ```open build/index.html``` Open the build project in your default browser\n- ```npm run release``` Build production version\n- ```npm run deploy``` Build production version \u0026 move it to the github pages fodler\n\n#### Docker Build \u0026 Run\n\n```bash\ndocker build . -t jmh-visualizer\ndocker run --rm -d -p 80:80 --name jmh-visualizer jmh-visualizer \n```\n\nNow you can access the UI on ```http://localhost```.\n\n#### Realease\n- Increase version in package.json\n- Update README.md in case of major releases\n- ```npm run deploy```\n- commit \u0026 push\n- tag with\n  - _git tag -a $releaseVersion -m \"$releaseVersion release\"_\n  - _git push --tags_\n\n\n## Credits\n\nhttp://recharts.org/ - The chart ground work\n\nhttp://www.favicon.cc/ - Created the favicon with\n\nBabel, webpack, react,... and many more for an enjoyable webstack!\n\n\n## Donating\n\n[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1.0.0/dist/button.svg)](https://www.paypal.me/JohannesZillmann/5.4)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzillmann%2Fjmh-visualizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjzillmann%2Fjmh-visualizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzillmann%2Fjmh-visualizer/lists"}