{"id":20285710,"url":"https://github.com/marcisbee/js-store-benchmark","last_synced_at":"2026-06-05T08:31:50.485Z","repository":{"id":199440962,"uuid":"702500586","full_name":"Marcisbee/js-store-benchmark","owner":"Marcisbee","description":"Performance \u0026 size comparison between JS store management libraries","archived":false,"fork":false,"pushed_at":"2024-12-18T11:29:55.000Z","size":543,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T03:15:21.615Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://marcisbee.com/js-store-benchmark","language":"TypeScript","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/Marcisbee.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":"2023-10-09T12:43:36.000Z","updated_at":"2025-01-04T07:44:18.000Z","dependencies_parsed_at":"2024-11-14T14:30:50.057Z","dependency_job_id":"3c75372c-70c2-4be7-b6d9-a3214f8af73b","html_url":"https://github.com/Marcisbee/js-store-benchmark","commit_stats":null,"previous_names":["marcisbee/js-store-benchmark"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcisbee%2Fjs-store-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcisbee%2Fjs-store-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcisbee%2Fjs-store-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcisbee%2Fjs-store-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Marcisbee","download_url":"https://codeload.github.com/Marcisbee/js-store-benchmark/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241780512,"owners_count":20019061,"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-14T14:28:35.285Z","updated_at":"2026-06-05T08:31:50.467Z","avatar_url":"https://github.com/Marcisbee.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# js-store-benchmark\nI created a simple benchmark to get the gist of how this library performs.\n\nAlso one thing to note is that I disabled batching in valtio as it is avoids sync code and cannot really be benchmarked in a way we can test it.\n\nSo I created a simple `counter state` with `increment action` with each library I cared to test and:\n\n1. Rendered that counter component with initial state\n```sh\nuse-reducer ............ 137.2 ms/ops ±2.5 | 166.4 KB\nuse-state .............. 137.8 ms/ops ±2.3 | 166.4 KB\nuse-sync-external-store  142.5 ms/ops ±3.6 | 166.5 KB\nconstate-v3.3.2 ........ 142.5 ms/ops ±1.4 | 167.7 KB\nuse-context ............ 142.6 ms/ops ±2.6 | 166.6 KB\nexome-v2.6.1 ........... 142.7 ms/ops ±4.8 | 168.2 KB\nstoreon-v3.1.5 ......... 145.4 ms/ops ±2.1 | 167.5 KB\nnanostores-v0.8.1 ...... 145.8 ms/ops ±3.0 | 168.5 KB\nzustand-v4.4.3 ......... 146.8 ms/ops ±1.9 | 170.1 KB\nsimpler-state-v1.2.1 ... 147.6 ms/ops ±1.0 | 169.8 KB\nremini-v1.3.0 .......... 147.7 ms/ops ±1.9 | 172.4 KB\ntanstack-store-v0.1.3 .. 148.1 ms/ops ±2.9 | 170.0 KB\nuse-change-v1.2.1 ...... 150.7 ms/ops ±2.7 | 171.8 KB\npreact-signals-v1.3.6 .. 152.4 ms/ops ±4.9 | 175.4 KB\nsignia-v0.1.4 .......... 152.8 ms/ops ±4.3 | 173.7 KB\neffector-v22.8.7 ....... 153.0 ms/ops ±2.9 | 183.3 KB\nredux-v4.2.1 ........... 156.7 ms/ops ±5.3 | 181.1 KB\nreact-easy-state-v6.3.0  157.2 ms/ops ±2.5 | 177.3 KB\nmobx-v6.10.2 ........... 157.7 ms/ops ±9.2 | 237.1 KB\ntrashly-v0.1.6 ......... 159.3 ms/ops ±5.0 | 194.1 KB\npullstate-v1.25.0 ...... 163.4 ms/ops ±2.4 | 187.9 KB\njotai-v1.13.1 .......... 169.8 ms/ops ±4.0 | 175.5 KB\nredux-toolkit-v1.9.7 ... 174.4 ms/ops ±3.5 | 208.9 KB\nvaltio-v1.11.2 ......... 176.8 ms/ops ±2.9 | 174.8 KB\nrecoil-v0.7.7 .......... 185.3 ms/ops ±7.3 | 256.3 KB\nresso-v0.14.0 .......... 192.6 ms/ops ±1.6 | 168.7 KB\nxstate-v4.38.2 ......... 205.0 ms/ops ±2.2 | 238.8 KB\n```\n\n2. Triggered increment action and updated component view\n```sh\nexome-v2.6.1 ......... 76.0 ms/ops ±1.7 | 169.0 KB\nsignia-v0.1.4 ........ 79.3 ms/ops ±0.9 | 174.4 KB\nsimpler-state-v1.2.1 . 79.7 ms/ops ±1.2 | 170.5 KB\nnanostores-v0.8.1 .... 80.0 ms/ops ±3.4 | 169.2 KB\npreact-signals-v1.3.6  80.4 ms/ops ±0.9 | 176.1 KB\nrecoil-v0.7.7 ........ 91.9 ms/ops ±4.7 | 257.1 KB\njotai-v1.13.1 ........ 97.0 ms/ops ±1.2 | 176.3 KB\nredux-v4.2.1 ......... 890.1 ms/ops ±52.6 | 181.9 KB\nmobx-v6.10.2 ......... 907.8 ms/ops ±50.6 | 237.9 KB\nredux-toolkit-v1.9.7 . 934.3 ms/ops ±71.0 | 209.7 KB\ntrashly-v0.1.6 ....... 1027.0 ms/ops ±47.3 | 194.8 KB\nvaltio-v1.11.2 ....... 3824.6 ms/ops ±36.6 | 175.6 KB\n```\n\n\u003c!-- _Note: **Less is better**_ --\u003e\n\nBenchmarks are run on `darwin 24.1.0, Apple M1 (8 core) arm64`\n\nI know counter doesn't really show real world app performance, but I didn't want to waste much time re-creating real world app for each state so this will have to do.\n\n# Running benchmarks\nThere's a cli to run and return results. Tests run on top of `tachometer` library from Google via Chromium in browser environment.\n\nBefore starting, make sure you're in `/benchmark` directory.\n\nTo prepare dependencies, run:\n```\nnpm install\n```\n\nAnd to run tests:\n```\nnode run.react.counter.mjs\nnode run.react.fields.mjs\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcisbee%2Fjs-store-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcisbee%2Fjs-store-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcisbee%2Fjs-store-benchmark/lists"}