{"id":21166007,"url":"https://github.com/peterdee/node-cpu-heavy","last_synced_at":"2026-05-10T15:37:45.665Z","repository":{"id":103803809,"uuid":"456269107","full_name":"peterdee/node-cpu-heavy","owner":"peterdee","description":"Measuring heavy CPU load in Node","archived":false,"fork":false,"pushed_at":"2022-02-17T11:27:40.000Z","size":67,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"release","last_synced_at":"2025-01-21T10:11:15.866Z","etag":null,"topics":["child-process","cluster","fastify","node","worker-threads"],"latest_commit_sha":null,"homepage":"http://localhost:5001","language":"JavaScript","has_issues":false,"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/peterdee.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":"2022-02-06T20:51:01.000Z","updated_at":"2023-08-30T13:12:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"ce80e090-84e9-49f8-b711-0195b4ef8973","html_url":"https://github.com/peterdee/node-cpu-heavy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterdee%2Fnode-cpu-heavy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterdee%2Fnode-cpu-heavy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterdee%2Fnode-cpu-heavy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterdee%2Fnode-cpu-heavy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterdee","download_url":"https://codeload.github.com/peterdee/node-cpu-heavy/tar.gz/refs/heads/release","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243615336,"owners_count":20319726,"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":["child-process","cluster","fastify","node","worker-threads"],"created_at":"2024-11-20T14:47:52.997Z","updated_at":"2026-05-10T15:37:40.618Z","avatar_url":"https://github.com/peterdee.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Measuring heavy CPU load in Node\n\nThe goal is to get a general idea about Node's ability to handle a heavy CPU load and determine the best way to handle upcoming requests when working with heavy CPU operations\n\n[Fastify](https://www.fastify.io) is used as a server framework\n\nPerformance measured with [autocannon](https://www.npmjs.com/package/autocannon)\n\n### Test benches\n\n - PC: i3-4160 (2 cores / 4 threads), 8GB of DDR3 RAM\n\n - MBP: i7-8750H (6 cores / 12 threads), 16GB of DDR4 RAM\n\n### Measurements\n\n#### 1. Simple server\n\nA simple server that uses 1 core / 1 process / 1 thread to handle all incoming requests\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 9578 ms │ 9778 ms │ 9979 ms │ 9979 ms │ 9800.38 ms │ 126.58 ms │ 9979 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────┬──────┬─────┬─────────┬────────┬───────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50% │ 97.5%   │ Avg    │ Stdev │ Min   │\n├───────────┼─────┼──────┼─────┼─────────┼────────┼───────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 0   │ 5       │ 0.4    │ 1.25  │ 3     │\n├───────────┼─────┼──────┼─────┼─────────┼────────┼───────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 0 B │ 1.03 kB │ 82.3 B │ 255 B │ 618 B │\n└───────────┴─────┴──────┴─────┴─────────┴────────┴───────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n300 requests in 20.05s, 1.65 kB read\n192 errors (187 timeouts)\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬────────┬─────────┬─────────┬─────────┬────────────┬────────────┬─────────┐\n│ Stat    │ 2.5%   │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev      │ Max     │\n├─────────┼────────┼─────────┼─────────┼─────────┼────────────┼────────────┼─────────┤\n│ Latency │ 551 ms │ 5089 ms │ 8060 ms │ 8318 ms │ 4724.03 ms │ 1721.66 ms │ 8486 ms │\n└─────────┴────────┴─────────┴─────────┴─────────┴────────────┴────────────┴─────────┘\n┌───────────┬─────┬──────┬─────────┬─────────┬─────────┬───────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50%     │ 97.5%   │ Avg     │ Stdev │ Min   │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼───────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 12      │ 12      │ 10.9    │ 3.05  │ 4     │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼───────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 2.46 kB │ 2.46 kB │ 2.24 kB │ 625 B │ 820 B │\n└───────────┴─────┴──────┴─────────┴─────────┴─────────┴───────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n398 requests in 20.2s, 44.7 kB read\n80 errors (40 timeouts)\n```\n\n#### 2. Clustered server\n\nA server that uses `cluster` module to create additional Node processes to handle incoming requests utilizing all of the available CPU cores, limited by the number of CPU cores obtained with `os.cpus().length`\n\nAll of these processes are still using single threads for Javascript\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%   │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 510 ms │ 1952 ms │ 3761 ms │ 5454 ms │ 2015.55 ms │ 797.31 ms │ 8241 ms │\n└─────────┴────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────┬─────────┐\n│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev │ Min     │\n├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────┼─────────┤\n│ Req/Sec   │ 36      │ 36      │ 48      │ 53      │ 46.45   │ 3.79  │ 36      │\n├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────┼─────────┤\n│ Bytes/Sec │ 7.42 kB │ 7.42 kB │ 9.89 kB │ 10.9 kB │ 9.57 kB │ 780 B │ 7.42 kB │\n└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┴─────────┘\n\nReq/Bytes counts sampled once per second.\n\n1k requests in 20.04s, 191 kB read\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬────────┬─────────┬─────────┬─────────┬────────────┬────────────┬──────────┐\n│ Stat    │ 2.5%   │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev      │ Max      │\n├─────────┼────────┼─────────┼─────────┼─────────┼────────────┼────────────┼──────────┤\n│ Latency │ 344 ms │ 3193 ms │ 7303 ms │ 7441 ms │ 3544.42 ms │ 2060.86 ms │ 11230 ms │\n└─────────┴────────┴─────────┴─────────┴─────────┴────────────┴────────────┴──────────┘\n┌───────────┬────────┬────────┬─────────┬─────────┬─────────┬─────────┬────────┐\n│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min    │\n├───────────┼────────┼────────┼─────────┼─────────┼─────────┼─────────┼────────┤\n│ Req/Sec   │ 20     │ 20     │ 28      │ 36      │ 28.05   │ 5.69    │ 20     │\n├───────────┼────────┼────────┼─────────┼─────────┼─────────┼─────────┼────────┤\n│ Bytes/Sec │ 4.1 kB │ 4.1 kB │ 5.77 kB │ 7.42 kB │ 5.77 kB │ 1.18 kB │ 4.1 kB │\n└───────────┴────────┴────────┴─────────┴─────────┴─────────┴─────────┴────────┘\n\nReq/Bytes counts sampled once per second.\n\n696 requests in 20.17s, 115 kB read\n35 errors (1 timeouts)\n```\n\n#### 3. Child Process server\n\nA server where a Worker process forked every time request hits the server (i. e. request handler function is running), this creates lots of new processes and affects the performance significantly, since there is no limit to the amount of processes that can be forked\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬──────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev    │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼──────────┼─────────┤\n│ Latency │ 2375 ms │ 3154 ms │ 3910 ms │ 4310 ms │ 3148.87 ms │ 385.8 ms │ 4311 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴──────────┴─────────┘\n┌───────────┬─────┬──────┬──────┬─────────┬─────────┬─────────┬─────────┐\n│ Stat      │ 1%  │ 2.5% │ 50%  │ 97.5%   │ Avg     │ Stdev   │ Min     │\n├───────────┼─────┼──────┼──────┼─────────┼─────────┼─────────┼─────────┤\n│ Req/Sec   │ 0   │ 0    │ 29   │ 44      │ 29.05   │ 10.78   │ 6       │\n├───────────┼─────┼──────┼──────┼─────────┼─────────┼─────────┼─────────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 6 kB │ 9.11 kB │ 6.01 kB │ 2.23 kB │ 1.24 kB │\n└───────────┴─────┴──────┴──────┴─────────┴─────────┴─────────┴─────────┘\n\nReq/Bytes counts sampled once per second.\n\n681 requests in 20.05s, 120 kB read\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬────────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev      │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼────────────┼─────────┤\n│ Latency │ 1625 ms │ 6115 ms │ 7802 ms │ 8154 ms │ 5816.94 ms │ 1485.44 ms │ 8409 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴────────────┴─────────┘\n┌───────────┬─────┬──────┬─────────┬────────┬─────────┬─────────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50%     │ 97.5%  │ Avg     │ Stdev   │ Min   │\n├───────────┼─────┼──────┼─────────┼────────┼─────────┼─────────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 13      │ 42     │ 14.55   │ 9.98    │ 2     │\n├───────────┼─────┼──────┼─────────┼────────┼─────────┼─────────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 2.69 kB │ 8.7 kB │ 3.01 kB │ 2.06 kB │ 413 B │\n└───────────┴─────┴──────┴─────────┴────────┴─────────┴─────────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n391 requests in 20.72s, 60.2 kB read\n```\n\n#### 4. Worker Threads server\n\nA server where a new Worker Thread is launched every time request hits the server (i. e. request handler function is running), this affects the performance since lots of new threads are created to handle incoming requests\n\nAll of these threads are bound to a single process\n\nThe idea here is that thread context switching is done much faster than the process context switching\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 2648 ms │ 3160 ms │ 3577 ms │ 3741 ms │ 3125.99 ms │ 237.66 ms │ 3837 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────┬──────┬─────────┬─────────┬────────┬─────────┬─────────┐\n│ Stat      │ 1%  │ 2.5% │ 50%     │ 97.5%   │ Avg    │ Stdev   │ Min     │\n├───────────┼─────┼──────┼─────────┼─────────┼────────┼─────────┼─────────┤\n│ Req/Sec   │ 0   │ 0    │ 31      │ 74      │ 29.95  │ 21.09   │ 6       │\n├───────────┼─────┼──────┼─────────┼─────────┼────────┼─────────┼─────────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 6.42 kB │ 15.3 kB │ 6.2 kB │ 4.36 kB │ 1.24 kB │\n└───────────┴─────┴──────┴─────────┴─────────┴────────┴─────────┴─────────┘\n\nReq/Bytes counts sampled once per second.\n\n699 requests in 20.05s, 124 kB read\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 4504 ms │ 5412 ms │ 9371 ms │ 9709 ms │ 5633.47 ms │ 970.66 ms │ 9900 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────┬──────┬─────┬─────────┬─────────┬─────────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50% │ 97.5%   │ Avg     │ Stdev   │ Min   │\n├───────────┼─────┼──────┼─────┼─────────┼─────────┼─────────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 0   │ 94      │ 14.2    │ 25.14   │ 1     │\n├───────────┼─────┼──────┼─────┼─────────┼─────────┼─────────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 0 B │ 19.4 kB │ 2.93 kB │ 5.18 kB │ 206 B │\n└───────────┴─────┴──────┴─────┴─────────┴─────────┴─────────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n384 requests in 20.79s, 58.5 kB read\n```\n\n#### 5. Clustered Threads server\n\nA clustered server that launches a Worker Thread to do the heavy task every time request hits the server (i. e. request handler function is running)\n\nNumber of processes are limited to `os.cpus().length`, and each process creates a thread to handle a heavy task, so the amount of additional threads are restricted to 2 for each process (main thread and heavy task thread)\n\nCreating additional thread within a process negatively impacts the performance compared to just using `cluster`\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬─────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%    │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼─────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 2635 ms │ 3013 ms │ 3361 ms │ 3493 ms │ 3008.08 ms │ 193.95 ms │ 3630 ms │\n└─────────┴─────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────┬──────┬─────────┬─────────┬─────────┬────────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min   │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼────────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 37      │ 76      │ 30.05   │ 26.08  │ 1     │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼────────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 7.66 kB │ 15.7 kB │ 6.22 kB │ 5.4 kB │ 207 B │\n└───────────┴─────┴──────┴─────────┴─────────┴─────────┴────────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n701 requests in 20.06s, 124 kB read\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬────────┬─────────┬─────────┬─────────┬───────────┬────────────┬─────────┐\n│ Stat    │ 2.5%   │ 50%     │ 97.5%   │ 99%     │ Avg       │ Stdev      │ Max     │\n├─────────┼────────┼─────────┼─────────┼─────────┼───────────┼────────────┼─────────┤\n│ Latency │ 986 ms │ 3302 ms │ 9852 ms │ 9867 ms │ 4421.1 ms │ 3026.64 ms │ 9986 ms │\n└─────────┴────────┴─────────┴─────────┴─────────┴───────────┴────────────┴─────────┘\n┌───────────┬─────┬──────┬─────────┬─────────┬─────────┬─────────┬───────┐\n│ Stat      │ 1%  │ 2.5% │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min   │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼─────────┼───────┤\n│ Req/Sec   │ 0   │ 0    │ 7       │ 43      │ 13.5    │ 14.12   │ 2     │\n├───────────┼─────┼──────┼─────────┼─────────┼─────────┼─────────┼───────┤\n│ Bytes/Sec │ 0 B │ 0 B  │ 1.44 kB │ 8.88 kB │ 2.79 kB │ 2.91 kB │ 412 B │\n└───────────┴─────┴──────┴─────────┴─────────┴─────────┴─────────┴───────┘\n\nReq/Bytes counts sampled once per second.\n\n420 requests in 20.29s, 50.1 kB read\n77 errors (77 timeouts)\n```\n\n#### 6. Queued Threads server\n\nThis is the server that queues incoming requests and then handles them with Worker Threads\n\nWhen launching the test, 100 TCP connections are created and are opened during the whole test\n\nEach connection sends requests that are handled by HTTP module and then Fastify controller\n\nSeveral Worker Threads are launched at the server start, and are used to offload the heavy task into them, so that the main thread that runs Fastify server can serve the connections\n\nRequests are handled if workers are available, otherwise they are queued and then processed when free worker is available\n\nThis approach avoids main thread blocking, and everything works within the single process\n\nAs a result, this server has pretty much the same performance as with a `cluster` module, but only a single process is being used\n\n- MBP\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\n\nTODO: measurements\n```\n\n- PC\n\n```text\n// autocannon -c 100 -d 20 http://localhost:5001\nRunning 20s test @ http://localhost:5001\n100 connections\n\n┌─────────┬────────┬─────────┬─────────┬─────────┬────────────┬───────────┬─────────┐\n│ Stat    │ 2.5%   │ 50%     │ 97.5%   │ 99%     │ Avg        │ Stdev     │ Max     │\n├─────────┼────────┼─────────┼─────────┼─────────┼────────────┼───────────┼─────────┤\n│ Latency │ 657 ms │ 3188 ms │ 3334 ms │ 3344 ms │ 2979.67 ms │ 646.89 ms │ 3351 ms │\n└─────────┴────────┴─────────┴─────────┴─────────┴────────────┴───────────┴─────────┘\n┌───────────┬─────────┬─────────┬─────────┬────────┬─────────┬───────┬─────────┐\n│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg     │ Stdev │ Min     │\n├───────────┼─────────┼─────────┼─────────┼────────┼─────────┼───────┼─────────┤\n│ Req/Sec   │ 26      │ 26      │ 32      │ 33     │ 30.95   │ 1.86  │ 26      │\n├───────────┼─────────┼─────────┼─────────┼────────┼─────────┼───────┼─────────┤\n│ Bytes/Sec │ 5.36 kB │ 5.36 kB │ 6.59 kB │ 6.8 kB │ 6.38 kB │ 382 B │ 5.36 kB │\n└───────────┴─────────┴─────────┴─────────┴────────┴─────────┴───────┴─────────┘\n\nReq/Bytes counts sampled once per second.\n\n719 requests in 20.18s, 128 kB read\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterdee%2Fnode-cpu-heavy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterdee%2Fnode-cpu-heavy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterdee%2Fnode-cpu-heavy/lists"}