diff --git a/packages/app-astro/ci-stats.json b/packages/app-astro/ci-stats.json
index 5662fe48..000a033b 100644
--- a/packages/app-astro/ci-stats.json
+++ b/packages/app-astro/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "5.16.15",
"ssrOpsPerSec": 385,
"ssrAvgLatencyMs": 2.628,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 3806,
"ssrBodySizeKb": 99.86,
"ssrDuplicationFactor": 1,
diff --git a/packages/app-astro/stats/5.16.15.json b/packages/app-astro/stats/5.16.15.json
index 5662fe48..000a033b 100644
--- a/packages/app-astro/stats/5.16.15.json
+++ b/packages/app-astro/stats/5.16.15.json
@@ -4,6 +4,7 @@
"frameworkVersion": "5.16.15",
"ssrOpsPerSec": 385,
"ssrAvgLatencyMs": 2.628,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 3806,
"ssrBodySizeKb": 99.86,
"ssrDuplicationFactor": 1,
diff --git a/packages/app-baseline-html/ci-stats.json b/packages/app-baseline-html/ci-stats.json
index f877f787..9776e22d 100644
--- a/packages/app-baseline-html/ci-stats.json
+++ b/packages/app-baseline-html/ci-stats.json
@@ -3,6 +3,7 @@
"runner": "ubuntu-latest",
"ssrOpsPerSec": 766,
"ssrAvgLatencyMs": 1.315,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 7602,
"ssrBodySizeKb": 96.81,
"ssrDuplicationFactor": 1
diff --git a/packages/app-mastro/ci-stats.json b/packages/app-mastro/ci-stats.json
index b7adeac8..fb82c219 100644
--- a/packages/app-mastro/ci-stats.json
+++ b/packages/app-mastro/ci-stats.json
@@ -3,6 +3,7 @@
"runner": "ubuntu-latest",
"ssrOpsPerSec": 339,
"ssrAvgLatencyMs": 2.983,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 3353,
"ssrBodySizeKb": 181.95,
"ssrDuplicationFactor": 1
diff --git a/packages/app-next-js/ci-stats.json b/packages/app-next-js/ci-stats.json
index e7f35489..520b0ff2 100644
--- a/packages/app-next-js/ci-stats.json
+++ b/packages/app-next-js/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "16.1.1",
"ssrOpsPerSec": 125,
"ssrAvgLatencyMs": 8.117,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1232,
"ssrBodySizeKb": 199.11,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-next-js/stats/16.1.1.json b/packages/app-next-js/stats/16.1.1.json
index e7f35489..520b0ff2 100644
--- a/packages/app-next-js/stats/16.1.1.json
+++ b/packages/app-next-js/stats/16.1.1.json
@@ -4,6 +4,7 @@
"frameworkVersion": "16.1.1",
"ssrOpsPerSec": 125,
"ssrAvgLatencyMs": 8.117,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1232,
"ssrBodySizeKb": 199.11,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-nuxt/ci-stats.json b/packages/app-nuxt/ci-stats.json
index efb7d42d..6e6a1bcb 100644
--- a/packages/app-nuxt/ci-stats.json
+++ b/packages/app-nuxt/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "4.2.2",
"ssrOpsPerSec": 250,
"ssrAvgLatencyMs": 4.076,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2454,
"ssrBodySizeKb": 201.26,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-nuxt/stats/4.2.2.json b/packages/app-nuxt/stats/4.2.2.json
index efb7d42d..6e6a1bcb 100644
--- a/packages/app-nuxt/stats/4.2.2.json
+++ b/packages/app-nuxt/stats/4.2.2.json
@@ -4,6 +4,7 @@
"frameworkVersion": "4.2.2",
"ssrOpsPerSec": 250,
"ssrAvgLatencyMs": 4.076,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2454,
"ssrBodySizeKb": 201.26,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-react-router/ci-stats.json b/packages/app-react-router/ci-stats.json
index 0d86c650..86e1692c 100644
--- a/packages/app-react-router/ci-stats.json
+++ b/packages/app-react-router/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "7.10.1",
"ssrOpsPerSec": 64,
"ssrAvgLatencyMs": 15.528,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 644,
"ssrBodySizeKb": 211.14,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-react-router/stats/7.10.1.json b/packages/app-react-router/stats/7.10.1.json
index 0d86c650..86e1692c 100644
--- a/packages/app-react-router/stats/7.10.1.json
+++ b/packages/app-react-router/stats/7.10.1.json
@@ -4,6 +4,7 @@
"frameworkVersion": "7.10.1",
"ssrOpsPerSec": 64,
"ssrAvgLatencyMs": 15.528,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 644,
"ssrBodySizeKb": 211.14,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-solid-start/ci-stats.json b/packages/app-solid-start/ci-stats.json
index 284cf9bd..52535c24 100644
--- a/packages/app-solid-start/ci-stats.json
+++ b/packages/app-solid-start/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "1.2.1",
"ssrOpsPerSec": 263,
"ssrAvgLatencyMs": 4.066,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2460,
"ssrBodySizeKb": 227.79,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-solid-start/stats/1.2.1.json b/packages/app-solid-start/stats/1.2.1.json
index 284cf9bd..52535c24 100644
--- a/packages/app-solid-start/stats/1.2.1.json
+++ b/packages/app-solid-start/stats/1.2.1.json
@@ -4,6 +4,7 @@
"frameworkVersion": "1.2.1",
"ssrOpsPerSec": 263,
"ssrAvgLatencyMs": 4.066,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2460,
"ssrBodySizeKb": 227.79,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-sveltekit/ci-stats.json b/packages/app-sveltekit/ci-stats.json
index 51859c35..f630e7f6 100644
--- a/packages/app-sveltekit/ci-stats.json
+++ b/packages/app-sveltekit/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "2.49.4",
"ssrOpsPerSec": 276,
"ssrAvgLatencyMs": 3.725,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2685,
"ssrBodySizeKb": 183.55,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-sveltekit/stats/2.49.4.json b/packages/app-sveltekit/stats/2.49.4.json
index 51859c35..f630e7f6 100644
--- a/packages/app-sveltekit/stats/2.49.4.json
+++ b/packages/app-sveltekit/stats/2.49.4.json
@@ -4,6 +4,7 @@
"frameworkVersion": "2.49.4",
"ssrOpsPerSec": 276,
"ssrAvgLatencyMs": 3.725,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2685,
"ssrBodySizeKb": 183.55,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-tanstack-start-react/ci-stats.json b/packages/app-tanstack-start-react/ci-stats.json
index 571ab188..53fe5239 100644
--- a/packages/app-tanstack-start-react/ci-stats.json
+++ b/packages/app-tanstack-start-react/ci-stats.json
@@ -4,6 +4,7 @@
"frameworkVersion": "1.145.3",
"ssrOpsPerSec": 179,
"ssrAvgLatencyMs": 5.665,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1766,
"ssrBodySizeKb": 193.53,
"ssrDuplicationFactor": 2,
diff --git a/packages/app-tanstack-start-react/stats/1.145.3.json b/packages/app-tanstack-start-react/stats/1.145.3.json
index 571ab188..53fe5239 100644
--- a/packages/app-tanstack-start-react/stats/1.145.3.json
+++ b/packages/app-tanstack-start-react/stats/1.145.3.json
@@ -4,6 +4,7 @@
"frameworkVersion": "1.145.3",
"ssrOpsPerSec": 179,
"ssrAvgLatencyMs": 5.665,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1766,
"ssrBodySizeKb": 193.53,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/components/SSRLatencyChart.astro b/packages/docs/src/components/SSRLatencyChart.astro
index c6255a71..968a6fe8 100644
--- a/packages/docs/src/components/SSRLatencyChart.astro
+++ b/packages/docs/src/components/SSRLatencyChart.astro
@@ -3,12 +3,12 @@ import { ssrStats } from '../lib/collections'
import ComparisonBarChart from './ComparisonBarChart.astro'
const data = ssrStats
- .filter((f) => f?.name != null && Number.isFinite(f.ssrAvgLatencyMs))
.map((f) => ({
name: f.name,
- value: f.ssrAvgLatencyMs,
+ value: f.ssrMedianLatencyMs,
focused: f.isFocused,
}))
+ .filter((f) => f?.name != null && Number.isFinite(f.value))
---
-
+
diff --git a/packages/docs/src/components/SSRStatsTable.astro b/packages/docs/src/components/SSRStatsTable.astro
index c89abb4d..4d2bcbe8 100644
--- a/packages/docs/src/components/SSRStatsTable.astro
+++ b/packages/docs/src/components/SSRStatsTable.astro
@@ -15,7 +15,7 @@ const columns = [
: null,
},
{ key: 'ssrOpsPerSec', header: 'Ops/sec' },
- { key: 'ssrAvgLatencyMs', header: 'Avg Latency' },
+ { key: 'ssrLatencyMs', header: 'Median Latency' },
{ key: 'ssrBodySizeKb', header: 'Body Size' },
{ key: 'ssrDuplicationFactor', header: 'Duplication' },
]
@@ -25,7 +25,7 @@ const tableData = ssrStats.map((f) => ({
package: f.package,
isFocused: f.package === 'app-baseline-html' ? true : f.isFocused,
ssrOpsPerSec: f.ssrOpsPerSec?.toLocaleString() ?? '',
- ssrAvgLatencyMs: `${f.ssrAvgLatencyMs}ms`,
+ ssrLatencyMs: `${f.ssrMedianLatencyMs}ms`,
ssrBodySizeKb: `${f.ssrBodySizeKb}kb`,
ssrDuplicationFactor: `${f.ssrDuplicationFactor}x`,
}))
diff --git a/packages/docs/src/content.config.ts b/packages/docs/src/content.config.ts
index 55a5f22c..491223fd 100644
--- a/packages/docs/src/content.config.ts
+++ b/packages/docs/src/content.config.ts
@@ -53,6 +53,7 @@ const runtimeCollection = defineCollection({
order: z.number(),
ssrOpsPerSec: z.number(),
ssrAvgLatencyMs: z.number(),
+ ssrMedianLatencyMs: z.number(),
ssrSamples: z.number(),
ssrBodySizeKb: z.number(),
ssrDuplicationFactor: z.number(),
diff --git a/packages/docs/src/content/runtime/app-astro.json b/packages/docs/src/content/runtime/app-astro.json
index 97c338cd..aee984ff 100644
--- a/packages/docs/src/content/runtime/app-astro.json
+++ b/packages/docs/src/content/runtime/app-astro.json
@@ -5,6 +5,7 @@
"type": "ssr-app",
"ssrOpsPerSec": 385,
"ssrAvgLatencyMs": 2.628,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 3806,
"ssrBodySizeKb": 99.86,
"ssrDuplicationFactor": 1,
diff --git a/packages/docs/src/content/runtime/app-baseline-html.json b/packages/docs/src/content/runtime/app-baseline-html.json
index 2a836092..12eab4cc 100644
--- a/packages/docs/src/content/runtime/app-baseline-html.json
+++ b/packages/docs/src/content/runtime/app-baseline-html.json
@@ -5,6 +5,7 @@
"isFocused": false,
"ssrOpsPerSec": 766,
"ssrAvgLatencyMs": 1.315,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 7602,
"ssrBodySizeKb": 96.81,
"ssrDuplicationFactor": 1,
diff --git a/packages/docs/src/content/runtime/app-mastro.json b/packages/docs/src/content/runtime/app-mastro.json
index 4c45a11e..60c94877 100644
--- a/packages/docs/src/content/runtime/app-mastro.json
+++ b/packages/docs/src/content/runtime/app-mastro.json
@@ -7,6 +7,7 @@
"runner": "ubuntu-latest",
"ssrOpsPerSec": 339,
"ssrAvgLatencyMs": 2.983,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 3353,
"ssrBodySizeKb": 181.95,
"ssrDuplicationFactor": 1,
diff --git a/packages/docs/src/content/runtime/app-next-js.json b/packages/docs/src/content/runtime/app-next-js.json
index 41fc1458..c4984f56 100644
--- a/packages/docs/src/content/runtime/app-next-js.json
+++ b/packages/docs/src/content/runtime/app-next-js.json
@@ -8,6 +8,7 @@
"frameworkVersion": "16.1.1",
"ssrOpsPerSec": 125,
"ssrAvgLatencyMs": 8.117,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1232,
"ssrBodySizeKb": 199.11,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/content/runtime/app-nuxt.json b/packages/docs/src/content/runtime/app-nuxt.json
index 35456e16..d0554753 100644
--- a/packages/docs/src/content/runtime/app-nuxt.json
+++ b/packages/docs/src/content/runtime/app-nuxt.json
@@ -5,6 +5,7 @@
"type": "ssr-app",
"ssrOpsPerSec": 250,
"ssrAvgLatencyMs": 4.076,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2454,
"ssrBodySizeKb": 201.26,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/content/runtime/app-react-router.json b/packages/docs/src/content/runtime/app-react-router.json
index ff4f6a97..adf5a890 100644
--- a/packages/docs/src/content/runtime/app-react-router.json
+++ b/packages/docs/src/content/runtime/app-react-router.json
@@ -8,6 +8,7 @@
"frameworkVersion": "7.10.1",
"ssrOpsPerSec": 64,
"ssrAvgLatencyMs": 15.528,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 644,
"ssrBodySizeKb": 211.14,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/content/runtime/app-solid-start.json b/packages/docs/src/content/runtime/app-solid-start.json
index f10e63aa..dd1c7b02 100644
--- a/packages/docs/src/content/runtime/app-solid-start.json
+++ b/packages/docs/src/content/runtime/app-solid-start.json
@@ -8,6 +8,7 @@
"frameworkVersion": "1.2.1",
"ssrOpsPerSec": 263,
"ssrAvgLatencyMs": 4.066,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2460,
"ssrBodySizeKb": 227.79,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/content/runtime/app-sveltekit.json b/packages/docs/src/content/runtime/app-sveltekit.json
index 633efc14..89aaa051 100644
--- a/packages/docs/src/content/runtime/app-sveltekit.json
+++ b/packages/docs/src/content/runtime/app-sveltekit.json
@@ -8,6 +8,7 @@
"frameworkVersion": "2.49.4",
"ssrOpsPerSec": 276,
"ssrAvgLatencyMs": 3.725,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 2685,
"ssrBodySizeKb": 183.55,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/content/runtime/app-tanstack-start-react.json b/packages/docs/src/content/runtime/app-tanstack-start-react.json
index 436db99c..7daa9b3d 100644
--- a/packages/docs/src/content/runtime/app-tanstack-start-react.json
+++ b/packages/docs/src/content/runtime/app-tanstack-start-react.json
@@ -8,6 +8,7 @@
"frameworkVersion": "1.145.3",
"ssrOpsPerSec": 179,
"ssrAvgLatencyMs": 5.665,
+ "ssrMedianLatencyMs": 0,
"ssrSamples": 1766,
"ssrBodySizeKb": 193.53,
"ssrDuplicationFactor": 2,
diff --git a/packages/docs/src/pages/framework/[slug].astro b/packages/docs/src/pages/framework/[slug].astro
index 31424cbc..9066d9c3 100644
--- a/packages/docs/src/pages/framework/[slug].astro
+++ b/packages/docs/src/pages/framework/[slug].astro
@@ -137,7 +137,7 @@ const buildData = [
const ssrColumns = [
{ key: 'name', header: 'Framework', nameCell: true },
{ key: 'ssrOpsPerSec', header: 'Ops/sec' },
- { key: 'ssrAvgLatencyMs', header: 'Avg Latency' },
+ { key: 'ssrLatencyMs', header: 'Median Latency' },
{ key: 'ssrBodySizeKb', header: 'Body Size' },
{ key: 'ssrDuplicationFactor', header: 'Duplication' },
]
@@ -148,7 +148,7 @@ const ssrData = [
{
name: baseline.name,
ssrOpsPerSec: baseline.ssrOpsPerSec?.toLocaleString() ?? '',
- ssrAvgLatencyMs: `${baseline.ssrAvgLatencyMs}ms`,
+ ssrLatencyMs: `${baseline.ssrMedianLatencyMs}ms`,
ssrBodySizeKb: `${baseline.ssrBodySizeKb}kb`,
ssrDuplicationFactor: `${baseline.ssrDuplicationFactor}x`,
},
@@ -159,7 +159,7 @@ const ssrData = [
{
name: runtime.name,
ssrOpsPerSec: runtime.ssrOpsPerSec?.toLocaleString() ?? '',
- ssrAvgLatencyMs: `${runtime.ssrAvgLatencyMs}ms`,
+ ssrLatencyMs: `${runtime.ssrMedianLatencyMs}ms`,
ssrBodySizeKb: `${runtime.ssrBodySizeKb}kb`,
ssrDuplicationFactor: `${runtime.ssrDuplicationFactor}x`,
},
diff --git a/packages/stats-generator/src/run-ssr-benchmark.ts b/packages/stats-generator/src/run-ssr-benchmark.ts
index 7d7738c0..a9d52107 100644
--- a/packages/stats-generator/src/run-ssr-benchmark.ts
+++ b/packages/stats-generator/src/run-ssr-benchmark.ts
@@ -52,6 +52,7 @@ async function main() {
frameworkVersion,
ssrOpsPerSec: result.opsPerSec,
ssrAvgLatencyMs: result.avgLatencyMs,
+ ssrMedianLatencyMs: result.medianLatencyMs,
ssrSamples: result.samples,
ssrBodySizeKb: result.bodySizeKb,
ssrDuplicationFactor: result.duplicationFactor,
diff --git a/packages/stats-generator/src/save-ci-stats.ts b/packages/stats-generator/src/save-ci-stats.ts
index 23073860..c57e4fb5 100644
--- a/packages/stats-generator/src/save-ci-stats.ts
+++ b/packages/stats-generator/src/save-ci-stats.ts
@@ -181,6 +181,7 @@ async function main() {
frameworkVersion: ssrStats.frameworkVersion,
ssrOpsPerSec: ssrStats.ssrOpsPerSec,
ssrAvgLatencyMs: ssrStats.ssrAvgLatencyMs,
+ ssrMedianLatencyMs: ssrStats.ssrMedianLatencyMs,
ssrSamples: ssrStats.ssrSamples,
ssrBodySizeKb: ssrStats.ssrBodySizeKb,
ssrDuplicationFactor: ssrStats.ssrDuplicationFactor,
diff --git a/packages/stats-generator/src/schemas.ts b/packages/stats-generator/src/schemas.ts
index 4b3fb1fe..1493f0f1 100644
--- a/packages/stats-generator/src/schemas.ts
+++ b/packages/stats-generator/src/schemas.ts
@@ -22,6 +22,7 @@ export const BuildStatsSchema = z.object({
export const SSRStatsSchema = z.object({
ssrOpsPerSec: z.number().positive(),
ssrAvgLatencyMs: z.number().nonnegative(),
+ ssrMedianLatencyMs: z.number().nonnegative(),
ssrSamples: z.number().positive(),
ssrBodySizeKb: z.number().positive(),
ssrDuplicationFactor: z.number().nonnegative(),
diff --git a/packages/stats-generator/src/ssr/index.ts b/packages/stats-generator/src/ssr/index.ts
index 2da62de3..09163d45 100644
--- a/packages/stats-generator/src/ssr/index.ts
+++ b/packages/stats-generator/src/ssr/index.ts
@@ -105,6 +105,7 @@ export function toSSRStats(result: SSRBenchmarkResult): SSRStats {
type: 'ssr-app',
ssrOpsPerSec: result.opsPerSec,
ssrAvgLatencyMs: result.avgLatencyMs,
+ ssrMedianLatencyMs: result.medianLatencyMs,
ssrSamples: result.samples,
ssrBodySizeKb: result.bodySizeKb,
ssrDuplicationFactor: result.duplicationFactor,
diff --git a/packages/stats-generator/src/ssr/run-benchmark.ts b/packages/stats-generator/src/ssr/run-benchmark.ts
index 1835ad03..8e2cbcf4 100644
--- a/packages/stats-generator/src/ssr/run-benchmark.ts
+++ b/packages/stats-generator/src/ssr/run-benchmark.ts
@@ -103,6 +103,7 @@ export async function runBenchmark(
package: config.package,
opsPerSec: Math.round(task.result.throughput.mean),
avgLatencyMs: Number(task.result.latency.mean.toFixed(3)),
+ medianLatencyMs: Number(task.result.latency.p50.toFixed(3)),
samples: task.result.throughput.samplesCount,
bodySizeKb: Number((length / 1024).toFixed(2)),
duplicationFactor: Number(duplicationFactor.toFixed(2)),
diff --git a/packages/stats-generator/src/ssr/types.ts b/packages/stats-generator/src/ssr/types.ts
index 63b337f0..173b7976 100644
--- a/packages/stats-generator/src/ssr/types.ts
+++ b/packages/stats-generator/src/ssr/types.ts
@@ -17,6 +17,7 @@ export interface SSRBenchmarkResult {
package: string
opsPerSec: number
avgLatencyMs: number
+ medianLatencyMs: number
samples: number
bodySizeKb: number
duplicationFactor: number
@@ -28,6 +29,7 @@ export interface SSRStats {
type: 'ssr-app'
ssrOpsPerSec: number
ssrAvgLatencyMs: number
+ ssrMedianLatencyMs: number
ssrSamples: number
ssrBodySizeKb: number
ssrDuplicationFactor: number
diff --git a/packages/stats-generator/src/types.ts b/packages/stats-generator/src/types.ts
index 49dc7e2e..7897380a 100644
--- a/packages/stats-generator/src/types.ts
+++ b/packages/stats-generator/src/types.ts
@@ -44,6 +44,7 @@ export interface CIStats {
// SSR stats
ssrOpsPerSec?: number
ssrAvgLatencyMs?: number
+ ssrMedianLatencyMs?: number
ssrSamples?: number
ssrBodySizeKb?: number
ssrDuplicationFactor?: number