Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/frameworks.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -81,6 +84,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -111,6 +117,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -154,6 +163,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -197,6 +209,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -240,6 +255,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -283,6 +301,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down Expand Up @@ -326,6 +347,9 @@
},
{
"type": "dependencies"
},
{
"type": "browserBaseline"
}
]
},
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/generate-stats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
- '!packages/starter-*/install-stats.json'
- '!packages/starter-*/build-stats.json'
- '!packages/starter-*/corejs-stats.json'
- '!packages/starter-*/browser-baseline-stats.json'
- '!packages/starter-*/e18e-stats.json'
- 'packages/app-*/**'
- '!packages/app-*/ci-stats.json'
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/measure-framework.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ jobs:
- name: Scan build output for vendored core-js
run: pnpm --filter @framework-tracker/stats-generator run:corejs ${{ matrix.framework.package }}

- name: Scan build output for browser baseline requirements
if: contains(toJson(matrix.framework.measurements), 'browserBaseline')
run: pnpm --filter @framework-tracker/stats-generator run:browser-baseline ${{ matrix.framework.package }}

- name: Upload build stats
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
Expand All @@ -123,6 +127,15 @@ jobs:
retention-days: 1
if-no-files-found: warn

- name: Upload browser baseline stats
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: contains(toJson(matrix.framework.measurements), 'browserBaseline')
with:
name: browser-baseline-stats-${{ matrix.framework.name }}
path: packages/${{ matrix.framework.package }}/browser-baseline-stats.json
retention-days: 1
if-no-files-found: error

measure-ssr-request-throughput:
if: inputs.ssr-request-throughput-matrix != '[]'
runs-on: depot-ubuntu-24.04
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/preview-stats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ jobs:
echo "install=[]" >> $GITHUB_OUTPUT
echo "build=[]" >> $GITHUB_OUTPUT
echo "ssr-request-throughput=[]" >> $GITHUB_OUTPUT
echo "deps=[]" >> $GITHUB_OUTPUT
exit 0
fi
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/validate-stats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ on:
- '!packages/starter-*/install-stats.json'
- '!packages/starter-*/build-stats.json'
- '!packages/starter-*/corejs-stats.json'
- '!packages/starter-*/browser-baseline-stats.json'
- '!packages/starter-*/e18e-stats.json'

jobs:
Expand Down Expand Up @@ -91,6 +92,15 @@ jobs:
(cd packages/$PKG && npx @e18e/cli@0.5.0 analyze --json > e18e-stats.json || true)
done

echo ""
echo "=== Running browser baseline scans ==="
FRAMEWORKS=$(cat .github/frameworks.json)
echo "$FRAMEWORKS" | jq -c '.[] | select(.starter) | select(.starter.measurements | map(.type) | contains(["browserBaseline"]))' | while read -r framework; do
PKG=$(echo "$framework" | jq -r '.starter.package')
echo "Scanning browser baseline requirements for $PKG..."
pnpm --filter @framework-tracker/stats-generator run:browser-baseline $PKG
done

echo ""
echo "=== Running client-side rendered benchmarks ==="
FRAMEWORKS=$(cat .github/frameworks.json)
Expand Down
33 changes: 33 additions & 0 deletions packages/docs/src/components/BrowserBaselineTable.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
import { browserBaselineTableData } from '../lib/collections'
import { getFrameworkSlug } from '../lib/utils'
import StatsTable from './StatsTable.astro'

interface Props {
packageName?: string
label?: string
}

const { packageName, label = 'Browser baseline by framework' } = Astro.props

const data =
packageName == null
? browserBaselineTableData
: browserBaselineTableData.filter((row) => row.package === packageName)

const columns = [
{
key: 'name',
header: 'Framework',
nameCell: true,
href: (row: Record<string, unknown>) =>
`/framework/${getFrameworkSlug(row.package as string)}`,
},
{ key: 'status', header: 'Baseline' },
{ key: 'feature', header: 'Feature' },
{ key: 'year', header: 'Year' },
{ key: 'features', header: 'Features' },
]
---

<StatsTable label={label} columns={columns} data={data} />
13 changes: 13 additions & 0 deletions packages/docs/src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@ const devtimeCollection = defineCollection({
.optional(),
vendoredCoreJsSize: z.number().optional(),
vendoredCoreJsUnnecessaryModules: z.array(z.string()).optional(),
browserBaselineTests: z
.object({
baselineStatus: z.union([
z.literal('high'),
z.literal('low'),
z.literal(false),
z.null(),
]),
baselineYear: z.number().nullable(),
baselineReason: z.string().nullable(),
baselineFeatureCount: z.number(),
})
.optional(),
timingMeasuredAt: z.string(),
runner: z.string(),
frameworkVersion: z.string().optional(),
Expand Down
8 changes: 7 additions & 1 deletion packages/docs/src/content/devtime/starter-astro.json
Original file line number Diff line number Diff line change
Expand Up @@ -123,5 +123,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": null,
"baselineYear": null,
"baselineReason": null,
"baselineFeatureCount": 0
}
}
8 changes: 7 additions & 1 deletion packages/docs/src/content/devtime/starter-mastro.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,11 @@
"depInstallSize": 28724892,
"e18eMessages": [],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": null,
"baselineYear": null,
"baselineReason": null,
"baselineFeatureCount": 0
}
}
8 changes: 7 additions & 1 deletion packages/docs/src/content/devtime/starter-next-js.json
Original file line number Diff line number Diff line change
Expand Up @@ -406,5 +406,11 @@
"web.url-search-params.delete",
"web.url-search-params.has",
"web.url-search-params.size"
]
],
"browserBaselineTests": {
"baselineStatus": "high",
"baselineYear": 2022,
"baselineReason": null,
"baselineFeatureCount": 46
}
}
8 changes: 7 additions & 1 deletion packages/docs/src/content/devtime/starter-nuxt.json
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": false,
"baselineYear": null,
"baselineReason": "temporal",
"baselineFeatureCount": 40
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,5 +83,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": "high",
"baselineYear": 2022,
"baselineReason": null,
"baselineFeatureCount": 40
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -433,5 +433,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": "high",
"baselineYear": 2020,
"baselineReason": null,
"baselineFeatureCount": 29
}
}
8 changes: 7 additions & 1 deletion packages/docs/src/content/devtime/starter-sveltekit.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": "high",
"baselineYear": 2020,
"baselineReason": null,
"baselineFeatureCount": 40
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,5 +108,11 @@
}
],
"vendoredCoreJsSize": 0,
"vendoredCoreJsUnnecessaryModules": []
"vendoredCoreJsUnnecessaryModules": [],
"browserBaselineTests": {
"baselineStatus": "high",
"baselineYear": 2022,
"baselineReason": null,
"baselineFeatureCount": 45
}
}
42 changes: 42 additions & 0 deletions packages/docs/src/lib/collections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -293,3 +293,45 @@ export const coreJsTableData = starterStats.map((f) => {
: '—',
}
})

function formatBaselineStatus(
status: 'high' | 'low' | false | null | undefined,
featureCount: number | undefined,
) {
if (featureCount === 0) return '—'
if (status === 'high') return 'High'
if (status === 'low') return 'Low'
if (status === false) return 'Limited'
return '—'
}

function formatBaselineReason(
reason: string | string[] | null | undefined,
): string {
if (Array.isArray(reason)) return reason.length > 0 ? reason.join(', ') : '—'
return reason ?? '—'
}

export const browserBaselineTableData = starterStats.map((f) => {
const baseline = f.browserBaselineTests
return {
name: f.name,
package: f.package,
isFocused: f.isFocused,
status: formatBaselineStatus(
baseline?.baselineStatus,
baseline?.baselineFeatureCount,
),
feature: formatBaselineReason(baseline?.baselineReason),
year:
baseline?.baselineFeatureCount === 0
? '—'
: baseline?.baselineYear != null
? String(baseline.baselineYear)
: '—',
features:
baseline?.baselineFeatureCount != null
? baseline.baselineFeatureCount.toLocaleString()
: '—',
}
})
4 changes: 4 additions & 0 deletions packages/docs/src/pages/dev-time.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
import BuildInstallStatsTable from '../components/BuildInstallStatsTable.astro'
import BrowserBaselineTable from '../components/BrowserBaselineTable.astro'
import BuildSizeCharts from '../components/BuildSizeCharts.astro'
import CoreJsTable from '../components/CoreJsTable.astro'
import DependencyCharts from '../components/DependencyCharts.astro'
Expand Down Expand Up @@ -38,4 +39,7 @@ import Layout from '../layouts/Layout.astro'
label="Core-JS Polyfills"
/>
<CoreJsTable />
<h2 id="browser-baseline">Browser Baseline</h2>
<DetailsLink href="/methodology#browser-baseline" label="Browser Baseline" />
<BrowserBaselineTable />
</Layout>
7 changes: 7 additions & 0 deletions packages/docs/src/pages/framework/[slug].astro
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
import { getCollection } from 'astro:content'
import BackLink from '../../components/BackLink.astro'
import BrowserBaselineTable from '../../components/BrowserBaselineTable.astro'
import DevTimeChart from '../../components/DevTimeChart.astro'
import PageHeader from '../../components/PageHeader.astro'
import DetailsLink from '../../components/DetailsLink.astro'
Expand Down Expand Up @@ -271,6 +272,12 @@ const serverSideRenderedData = runtime?.serverSideRenderedTests
href="/methodology#build-and-install-times"
label="Build and Install Times"
/>
<h2>Browser Baseline</h2>
<BrowserBaselineTable
packageName={devtime.package}
label={`${devtime.name} browser baseline`}
/>
<DetailsLink href="/methodology#browser-baseline" label="Browser Baseline" />

{
coreJsModules.length > 0 && (
Expand Down
Loading
Loading