{"id":13539808,"url":"https://github.com/BuilderIO/framework-benchmarks","last_synced_at":"2025-04-02T06:31:34.145Z","repository":{"id":56726358,"uuid":"522757183","full_name":"BuilderIO/framework-benchmarks","owner":"BuilderIO","description":"Test each framework for it's performance cost","archived":false,"fork":false,"pushed_at":"2022-09-14T14:41:52.000Z","size":9603,"stargazers_count":476,"open_issues_count":5,"forks_count":22,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-11-03T04:32:47.712Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/BuilderIO.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}},"created_at":"2022-08-09T01:06:23.000Z","updated_at":"2024-10-28T05:35:13.000Z","dependencies_parsed_at":"2022-08-16T00:31:09.795Z","dependency_job_id":null,"html_url":"https://github.com/BuilderIO/framework-benchmarks","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/BuilderIO%2Fframework-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuilderIO%2Fframework-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuilderIO%2Fframework-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuilderIO%2Fframework-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BuilderIO","download_url":"https://codeload.github.com/BuilderIO/framework-benchmarks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246768027,"owners_count":20830594,"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-08-01T09:01:32.165Z","updated_at":"2025-04-02T06:31:29.136Z","avatar_url":"https://github.com/BuilderIO.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Framework Benchmarks\n\nTest each framework for it's performance, particularly common Lighthouse and CWV metrics as applications scale\n\n**Important: This is not a measure of \"is framework x better than y\". There are many tradeoffs to weigh when choosing the best framework for you - such as DX, features, familiarity, ecosystem, documentation, etc. These benchmarks only show a part of the picture.**\n\n### Goals\n\nThe goal for this project are to understand the performance tradeoffs of popular frameworks in real world-ish scenarios. We want to assume non trivial codebases and imperfect code and conditions, so to see how each framework holds up to real world scenarios and scale.\n\nWe are intentionally not focused on client side rendering performance, for that please use [Stefan Krause](https://github.com/krausest)'s great [js-framework-benchmark](https://github.com/krausest/js-framework-benchmark)\n\n### Status\n\nThis project is in initial development. Do not put too much weight on these current results, there is still much more to do to ensure accuracy, consistency, and fairness.\n\n**Contributions are welcome!**\n\n## How it works\n\n### Methodology\n\nWe created a basic starting point for each framework in the `frameworks/` folder using each framework's suggested starter/cli.\n\nWe then create basic example components and use [Mitosis](https://github.com/builderio/mitosis) to compile them to best-effort idiomatic code for each framework. This will never be perfectly optimized code\n\nWe then build and serve each project, and run Lighthouse on each project with puppeteer, including with [emulation of slow devices and networks](https://github.com/GoogleChrome/lighthouse/blob/master/docs/emulation.md) (aka includes CPU and network throttling), and measure:\n\n- **FCP**: [First Contentful Paint](https://web.dev/first-contentful-paint/) (lower is better)\n- **LCP**: [Largest Contentful Paint](https://web.dev/largest-contentful-paint/) (lower is better)\n- **TBT**: [Total Blocking Time](https://web.dev/tbt/) (lower is better)\n- **TTI**: [Time to Interactive](https://web.dev/interactive/) (lower is better)\n- **Score**: [Lighthouse Performance Score](https://web.dev/performance-scoring/) (higher is better)\n- **Eager JS Kib**: the KiB of JS that is eagerly downloaded and executed from `\u003cscript\u003e` tags for the initial page load. This is the actual size transferred over the network, including compression (lower is better)\n- **Total KiB**: the total KiB transferred with the given page, including HTML, CSS, prefetched resources, etc. Also known as the \"total byte weight\". This is the actual size transferred over the network, including compression (lower is better)\n\nWe take the median of multiple runs, and sort the results by TTI, ascending\n\nWe are also experimenting with looking at other metrics, such as [build times](#build-times)\n\n### The Frameworks\n\nAlphabetically:\n\n- [astro](https://astro.build/) - generated via their official CLI, with Solid for the interactive parts. [Source](frameworks/astro)\n- [fresh](https://fresh.deno.dev/) - generated via their official CLI. [Source](frameworks/fresh)\n- [gatsby](https://www.gatsbyjs.com/) - contributed by the Gatsby team. [Source](frameworks/gatsby)\n- [hydrogen](https://hydrogen.shopify.dev/) - generated via their [official CLI](https://shopify.dev/custom-storefronts/hydrogen/getting-started/quickstart). [Source](frameworks/hydrogen)\n- [lit](https://lit.dev/) - generated via their official [starter](https://github.com/lit/lit-element-starter-ts). [Source](frameworks/lit)\n- [marko](https://markojs.com/) - generated via their official CLI. [Source](frameworks/marko)\n- [next](https://nextjs.org/) - generated via their official CLI. [Source](frameworks/next)\n- [nuxt2](https://nuxtjs.org/) - generated via their official CLI. [Source](frameworks/nuxt2)\n- [nuxt3](https://v3.nuxtjs.org/) - generated via their official CLI (in beta). [Source](frameworks/nuxt3)\n- [qwik](https://qwik.builder.io/) - generated with Qwik City (meta framework). [Source](frameworks/qwik)\n- [react](https://reactjs.org/) - generated from create-react-app with react-router-dom added for routing. [Source](frameworks/react)\n- react-ssr-node - Ultra simple Node server to server-side render react. [Source](frameworks/react-ssr-node)\n- react-ssr-deno - Ultra simple Deno server to server-side render react. [Source](frameworks/react-ssr-deno)\n- react-ssr-bun - Ultra simple Bun server to server-side render react. [Source](frameworks/react-ssr-bun)\n- preact-ssr-node - Ultra simple Node server to server-side render preact. [Source](frameworks/preact-ssr-node)\n- [remix](https://remix.run/) - generated from create-remix. Currently excluded from Lighthouse tests by request from the team, from concerns about the code being too non-idiomatic. [Source](frameworks/remix)\n- [solid](https://www.solidjs.com/) - generated with Solid Start (meta framework). [Source](frameworks/solid)\n- [svelte](https://svelte.dev/) - generated with Svelte Kit (meta framework). [Source](frameworks/svelte)\n- [vue3](https://vuejs.org/) - generated via their official CLI, with routing. [Source](frameworks/vue3)\n\n### Sample output\n\n**Important:** This project is still in initial development. Do not put too much weight on these current results, there is still much more to do to ensure accuracy, consistency, and fairness.\n\nJump to:\n\n- [Dashboard](#dashboard)\n- [Todo App](#todo-app)\n- [Hello World](#hello-world)\n- [SSR times](#ssr-times)\n- [SSR throughput (req/second)](#ssr-throughput-reqsecond)\n- [React SSR throughput](#react-ssr-throughput)\n- [Build times](#build-times)\n\n#### Dashboard:\n\nA more feature rich app for displaying table data, sorting, filtering, etc. Uses more JS, more like a [median website](https://almanac.httparchive.org/en/2021/javascript). [Source](https://github.com/BuilderIO/framework-benchmarks/blob/main/apps/components/src/components/dashboard.lite.tsx)\n\n```\n┌─────────┬────────────┬──────────┬──────────┬──────────┬──────────┬───────┬──────────────┬───────────┐\n│ (index) │    name    │   TTI    │   FCP    │   LCP    │   TBT    │ Score │ Eager JS KiB │ Total KiB │\n├─────────┼────────────┼──────────┼──────────┼──────────┼──────────┼───────┼──────────────┼───────────┤\n│    0    │   'qwik'   │ '0.6 s'  │ '0.6 s'  │ '1.5 s'  │  '0 ms'  │  100  │      2       │    38     │\n│    1    │  'react'   │ '0.8 s'  │ '0.8 s'  │ '2.4 s'  │  '0 ms'  │  98   │     187      │    199    │\n│    2    │  'gatsby'  │ '0.8 s'  │ '0.8 s'  │ '1.4 s'  │  '0 ms'  │  100  │      82      │    87     │\n│    3    │   'lit'    │ '0.8 s'  │ '0.8 s'  │ '1.1 s'  │  '0 ms'  │  100  │      23      │    25     │\n│    4    │  'solid'   │ '0.9 s'  │ '0.6 s'  │ '1.3 s'  │  '0 ms'  │  85   │      24      │    28     │\n│    5    │  'astro'   │ '0.9 s'  │ '0.9 s'  │ '1.1 s'  │  '0 ms'  │  100  │      15      │    35     │\n│    6    │  'marko'   │ '1.0 s'  │ '0.8 s'  │ '0.9 s'  │ '10 ms'  │  100  │      24      │    33     │\n│    7    │  'fresh'   │ '1.3 s'  │ '1.3 s'  │ '1.5 s'  │  '0 ms'  │  100  │      17      │    46     │\n│    8    │   'next'   │ '1.6 s'  │ '0.6 s'  │ '1.2 s'  │ '10 ms'  │  100  │      91      │    103    │\n│    9    │  'svelte'  │ '1.6 s'  │ '1.6 s'  │ '1.7 s'  │  '0 ms'  │  99   │      29      │    35     │\n│   10    │ 'angular'  │ '1.7 s'  │ '1.5 s'  │ '1.5 s'  │ '150 ms' │  98   │      86      │    88     │\n│   11    │  'nuxt3'   │ '1.7 s'  │ '1.7 s'  │ '1.7 s'  │  '0 ms'  │  99   │      59      │    65     │\n│   12    │   'vue3'   │ '1.8 s'  │ '1.2 s'  │ '2.1 s'  │  '0 ms'  │  94   │      41      │    50     │\n│   13    │  'nuxt2'   │ '2.1 s'  │ '1.2 s'  │ '2.1 s'  │ '70 ms'  │  98   │     106      │    118    │\n└─────────┴────────────┴──────────┴──────────┴──────────┴──────────┴───────┴──────────────┴───────────┘\n```\n\n#### Todo App:\n\nA very simple/trivial interactive Todo app. [Source](https://github.com/BuilderIO/framework-benchmarks/blob/main/apps/components/src/components/todo-app.lite.tsx)\n\nOrdered by TTI, ascending:\n\n```\n┌─────────┬────────────┬─────────┬─────────┬─────────┬──────────┬───────┬──────────────┬───────────┐\n│ (index) │    name    │   TTI   │   FCP   │   LCP   │   TBT    │ Score │ Eager JS KiB │ Total KiB │\n├─────────┼────────────┼─────────┼─────────┼─────────┼──────────┼───────┼──────────────┼───────────┤\n│    0    │  'astro'   │ '0.6 s' │ '0.6 s' │ '0.6 s' │  '0 ms'  │  100  │      20      │    32     │\n│    1    │   'qwik'   │ '0.7 s' │ '0.7 s' │ '1.2 s' │  '0 ms'  │  100  │      2       │    25     │\n│    2    │  'react'   │ '0.8 s' │ '0.8 s' │ '2.2 s' │  '0 ms'  │  99   │     159      │    171    │\n│    3    │  'fresh'   │ '0.8 s' │ '0.8 s' │ '0.9 s' │  '0 ms'  │  100  │      9       │    37     │\n│    4    │   'lit'    │ '0.8 s' │ '0.8 s' │ '1.1 s' │  '0 ms'  │  100  │      16      │    18     │\n│    5    │  'solid'   │ '1.0 s' │ '0.7 s' │ '1.3 s' │ '40 ms'  │  86   │      17      │    19     │\n│    6    │  'marko'   │ '1.1 s' │ '0.8 s' │ '0.9 s' │ '10 ms'  │  100  │      17      │    23     │\n│    7    │   'vue3'   │ '1.2 s' │ '1.2 s' │ '1.8 s' │ '10 ms'  │  99   │      33      │    41     │\n│    8    │  'svelte'  │ '1.5 s' │ '1.5 s' │ '1.5 s' │  '0 ms'  │  100  │      19      │    24     │\n│    9    │  'nuxt3'   │ '1.5 s' │ '1.5 s' │ '1.7 s' │  '0 ms'  │  99   │      50      │    55     │\n│   10    │  'gatsby'  │ '1.6 s' │ '0.8 s' │ '1.1 s' │  '0 ms'  │  100  │      70      │    75     │\n│   11    │  'nuxt2'   │ '1.6 s' │ '1.0 s' │ '1.0 s' │ '40 ms'  │  100  │      95      │    106    │\n│   12    │ 'angular'  │ '1.6 s' │ '1.5 s' │ '1.6 s' │ '30 ms'  │  99   │      72      │    74     │\n│   13    │   'next'   │ '2.2 s' │ '0.7 s' │ '0.8 s' │ '110 ms' │  99   │      83      │    94     │\n└─────────┴────────────┴─────────┴─────────┴─────────┴──────────┴───────┴──────────────┴───────────┘\n```\n\n#### Hello World:\n\nJust a few links and `\u003ch1\u003eHello World\u003c/h1\u003e`. [Source](https://github.com/BuilderIO/framework-benchmarks/blob/main/apps/components/src/components/hello-world.lite.tsx)\n\nOrdered by TTI, ascending:\n\n```\n┌─────────┬────────────┬─────────┬─────────┬─────────┬──────────┬───────┬──────────────┬───────────┐\n│ (index) │    name    │   TTI   │   FCP   │   LCP   │   TBT    │ Score │ Eager JS KiB │ Total KiB │\n├─────────┼────────────┼─────────┼─────────┼─────────┼──────────┼───────┼──────────────┼───────────┤\n│    0    │   'qwik'   │ '0.7 s' │ '0.7 s' │ '0.7 s' │  '0 ms'  │  100  │      0       │     4     │\n│    1    │  'astro'   │ '0.7 s' │ '0.7 s' │ '0.7 s' │  '0 ms'  │  100  │      0       │     9     │\n│    2    │  'react'   │ '0.8 s' │ '0.8 s' │ '2.2 s' │  '0 ms'  │  99   │     154      │    166    │\n│    3    │  'fresh'   │ '0.8 s' │ '0.8 s' │ '0.8 s' │  '0 ms'  │  100  │      0       │    27     │\n│    4    │  'marko'   │ '0.8 s' │ '0.8 s' │ '1.1 s' │  '0 ms'  │  100  │      15      │    21     │\n│    5    │   'lit'    │ '0.8 s' │ '0.6 s' │ '0.9 s' │ '10 ms'  │  100  │      15      │    16     │\n│    6    │  'solid'   │ '0.9 s' │ '0.9 s' │ '1.1 s' │  '0 ms'  │  100  │      16      │    18     │\n│    7    │   'vue3'   │ '1.2 s' │ '1.2 s' │ '1.5 s' │  '0 ms'  │  100  │      31      │    38     │\n│    8    │  'gatsby'  │ '1.4 s' │ '0.6 s' │ '1.0 s' │  '0 ms'  │  100  │      69      │    73     │\n│    9    │  'svelte'  │ '1.5 s' │ '1.5 s' │ '1.5 s' │  '0 ms'  │  100  │      18      │    22     │\n│   10    │  'nuxt2'   │ '1.5 s' │ '0.9 s' │ '0.9 s' │ '120 ms' │  99   │      93      │    103    │\n│   11    │  'nuxt3'   │ '1.5 s' │ '1.5 s' │ '1.7 s' │  '0 ms'  │  99   │      50      │    57     │\n│   12    │ 'angular'  │ '1.7 s' │ '1.5 s' │ '1.5 s' │ '150 ms' │  98   │      72      │    74     │\n│   13    │ 'hydrogen' │ '1.8 s' │ '0.6 s' │ '1.6 s' │ '30 ms'  │  91   │     160      │    172    │\n│   14    │   'next'   │ '2.1 s' │ '0.7 s' │ '0.8 s' │ '40 ms'  │  100  │      82      │    93     │\n└─────────┴────────────┴─────────┴─────────┴─────────┴──────────┴───────┴──────────────┴───────────┘\n```\n\n#### SSR times:\n\nTime it took to server-side render the [/dashboard page](#Dashboard:) in milliseconds. Smaller numbers are better.\n\n```\n┌─────────┬────────────┬─────┬─────┬─────┬────────┬─────────┐\n│ (index) │    name    │ 1%  │ 50% │ 99% │  Avg   │ Std Dev │\n├─────────┼────────────┼─────┼─────┼─────┼────────┼─────────┤\n│    0    │  'marko'   │  1  │  1  │  4  │  1.29  │   0.8   │\n│    1    │  'fresh'   │  4  │  4  │  6  │  4.19  │  0.88   │\n│    2    │ 'hydrogen' │  4  │  5  │ 14  │  5.63  │  4.39   │\n│    3    │  'svelte'  │  6  │  7  │ 18  │  8.17  │  3.12   │\n│    4    │  'solid'   │  6  │  8  │ 22  │  8.77  │   3.8   │\n│    5    │  'nuxt3'   │ 19  │ 25  │ 68  │ 29.49  │  18.09  │\n│    6    │  'nuxt2'   │ 11  │ 14  │ 32  │ 15.04  │  4.89   │\n│    7    │  'astro'   │ 11  │ 14  │ 38  │ 16.56  │  5.98   │\n│    8    │  'remix'   │ 12  │ 18  │ 62  │  20.3  │  8.87   │\n│    9    │  'gatsby'  │ 27  │ 33  │ 103 │  36.9  │  12.86  │\n│   10    │   'next'   │ 35  │ 40  │ 113 │ 46.96  │  19.06  │\n│   11    │ 'angular'  │ 113 │ 127 │ 400 │ 141.73 │  47.64  │\n└─────────┴────────────┴─────┴─────┴─────┴────────┴─────────┘\n```\n\n#### SSR throughput (req/second):\n\nSSR throughput of the dashboard page, measured by [autocannon](https://github.com/mcollina/autocannon), sorted by 99% percentile descending. Larger numbers are better.\n\n```\n┌─────────┬───────────────────┬──────┬──────┬──────┬─────────┬─────────┐\n│ (index) │        name       │  1%  │ 50%  │ 99%  │   Avg   │ Std Dev │\n├─────────┼───────────────────┼──────┼──────┼──────┼─────────┼─────────┤\n│    0    │      'marko'      │ 3677 │ 5411 │ 5951 │ 5263.1  │ 702.18  │\n│    1    │      'fresh'      │ 1748 │ 2057 │ 2123 │ 1997.73 │ 117.92  │\n│    2    │ 'preact-ssr-node' │ 1755 │ 2065 │ 2185 │ 2052.6  │ 115.11  │\n│    3    │     'hydrogen'    │ 843  │ 1653 │ 1807 │ 1528.1  │ 290.27  │\n│    4    │      'svelte'     │ 536  │ 820  │ 1107 │  795.3  │ 182.24  │\n│    5    │      'solid'      │ 534  │ 842  │ 1019 │ 830.64  │ 138.46  │\n│    6    │      'astro'      │ 444  │ 573  │ 641  │   579   │  56.1   │\n│    7    │      'nuxt2'      │ 384  │ 550  │ 588  │  539.8  │  54.2   │\n│    8    │      'nuxt3'      │ 229  │ 344  │ 411  │  335.3  │  45.62  │\n│    9    │      'remix'      │ 264  │ 371  │ 485  │  387.9  │  69.16  │\n│   10    │      'gatsby'     │ 158  │ 233  │ 277  │  239.6  │  34.64  │\n│   11    │       'next'      │ 142  │ 206  │ 233  │  203.7  │  24.71  │\n│   12    │     'angular'     │  45  │  72  │  76  │  69.91  │  8.61   │\n└─────────┴───────────────────┴──────┴──────┴──────┴─────────┴─────────┘\n```\n\n#### React SSR throughput:\n\nMeasure Node vs Bun vs Deno at SSR speed of a non trivial (the dashboard) React app. The below is requests per second. Larger numbers are better.\n\n```\n┌─────────┬───────────────────┬──────┬──────┬──────┬────── ─┬─────────┐\n│ (index) │       name        │  1%  │ 50%  │ 99%  │  Avg   │ Std Dev │\n├─────────┼───────────────────┼──────┼──────┼─ ────┼────────┼─────────┤\n│    0    │ 'preact-ssr-node' │ 1755 │ 2065 │ 2185 │ 2052.6 │ 115.11  │\n│    1    │ 'react-ssr-bun'   │ 500  │ 669  │ 718  │ 650.8  │  71.7   │\n│    2    │ 'react-ssr-deno'  │ 550  │ 600  │ 630  │  601   │  20.89  │\n│    3    │ 'react-ssr-node'  │ 267  │ 375  │ 394  │ 366.5  │  35.04  │\n└─────────┴───────────────────┴──────┴──────┴──────┴────────┴─────────┘\n```\n\nThe above uses Bun version `0.1.10`, Deno version `1.25.0`, Node.js version `16.14.0`. Run on a `2.6 GHz 6-Core Intel Core i7`.\n\n#### Build times:\n\n```\n┌─────────┬────────────┬──────────────────────┐\n│ (index) │    Name    │ Build Time (Seconds) │\n├─────────┼────────────┼──────────────────────┤\n│    0    │   'fresh'  │          0           │\n│    1    │   'vue3'   │         3.5          │\n│    2    │   'react'  │         7.4          │\n│    3    │  'svelte'  │         7.7          │\n│    4    │   'qwik'   │         7.7          │\n│    5    │   'next'   │         7.8          │\n│    6    │   'astro'  │         7.9          │\n│    7    │ 'hydrogen' │         8.4          │\n│    8    │    'lit'   │         8.4          │\n│    9    │  'gatsby'  │         9.9          │\n│   10    │  'angular' │         10.7         │\n│   11    │   'nuxt2'  │         12.8         │\n│   12    │   'solid'  │         12.9         │\n│   13    │   'nuxt3'  │          16          │\n│   14    │   'marko'  │         16.2         │\n└─────────┴────────────┴──────────────────────┘\n```\n\n## Roadmap\n\nNext things we want to add:\n\n- More complex examples that more closesly emulate real world sites and apps (e.g. a dashboard for exploring the test run results in interactive tables and graphs)\n- Test interaction delays - such as initial interaction (like add todo) or navigate to next page\n- Move test running to be remote, such as in GH actions ([Help wanted!](https://github.com/BuilderIO/framework-benchmarks/issues/6))\n- Benchmark SSR speeds. Also add Bun here.\n- Benchmark with and without Partytown for 3P scripts (and vs none at all)\n\nContributions welcome!\n\n## Running locally\n\n### Prereqs\n\nYou will need [Node.js](https://nodejs.org/en/download/) \u003e= 16.14.0k [Deno](https://deno.land/manual/getting_started/installation) installed locally, and [Bun](https://bun.sh/) installed locally\n\n### Setup\n\nAfter cloning this repo, install dependencies:\n\n```sh\nnpm install\n```\n\nNow you can start running the below scripts:\n\n### Install\n\nUse the install script to install dependencies of each framework:\n\n```sh\nnpm run fw-install\n```\n\n### Generate\n\nFirst, we must generate the component code for each framework via Mitosis.\n\n```sh\ncd apps/components\nnpm install\nnpm run build\n```\n\n### Build\n\nUse the build script to build all frameworks (be sure to `install` first as described above):\n\n```sh\nnpm run build\n```\n\n### Measure\n\nTo measure the weight of each framework (after you ran `install` and `build`):\n\n```sh\nnpm run measure\n```\n\n## Credit and Inspiration\n\n- [Stefan Krause](https://github.com/krausest) and his [js-framework-benchmark](https://github.com/krausest/js-framework-benchmark)\n- [Addy Osmani](https://github.com/addyosmani) and his great [Web Performance Recipes With Puppeteer](https://addyosmani.com/blog/puppeteer-recipes/) blog post\n- [Lighthouse](https://github.com/GoogleChrome/lighthouse) and the very helpful Lighthouse team\n- [Ryan Carniato](https://github.com/ryansolid) for always providing incredibly helpful insight and feedback\n- [Builder.io](https://www.builder.io/) for funding this research and development\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBuilderIO%2Fframework-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBuilderIO%2Fframework-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBuilderIO%2Fframework-benchmarks/lists"}