-
Notifications
You must be signed in to change notification settings - Fork 17
Closed
Milestone
Description
π§ͺ Performance Benchmark Report β https://explorer.livepeer.org/voting/
Date: 2025-11-12
Environment: Lighthouse v13.0.1 (mobile emulation, slow-4G, 4Γ CPU slowdown)
Runs: 3 consecutive
π Median Results (3-run average)
| Metric | Run 1 | Run 2 | Run 3 | Median | βGoodβ Threshold | Status |
|---|---|---|---|---|---|---|
| Performance Score | β 0.55 | β 0.57 | β 0.56 | β 0.56 | β₯ 0.90 | |
| First Contentful Paint (FCP) | 2.2 s | 1.9 s | 2.0 s | 2.0 s | β€ 1.8 s | |
| Largest Contentful Paint (LCP) | 13.9 s | 13.8 s | 13.3 s | β 13.7 s β | β€ 2.5 s | π¨ Severe delay |
| Speed Index | 2.2 s | 1.9 s | 2.1 s | 2.1 s β | β€ 3.0 s | β Good |
| Cumulative Layout Shift (CLS) | 0.00 | 0.00 | 0.00 | 0.00 β | β€ 0.10 | β Excellent |
| Total Blocking Time (TBT) | 3.4 s | 3.2 s | 3.3 s | β 3.3 s β | β€ 0.2 s | π¨ Poor |
| Time to Interactive (TTI) | 31 s | 32 s | 33 s | β 32 s β | β€ 4 s | π¨ Poor |
| Total Transfer Size | 5.4 MB | 5.5 MB | 5.5 MB | β 5.5 MB β | < 2 MB | π¨ Heavy |
π©Ί Diagnosis Summary
β The Good
- Server response and initial paint are reasonable (β 2 s FCP).
- Layout stability is perfect (0 CLS).
- Speed Index β 2 s β visual load is fast once LCP finally renders.
- LCP β 13β14 s β the hero element or first major content loads extremely late.
- ~4 MB of JavaScript blocking the main thread.
- TTI > 30 s & TBT β 3 s β page is effectively unresponsive for users after visual paint.
- Suspense/data-fetch hydration and graph/contract widgets likely defer LCP.
π§© Probable Root Causes
- Large client bundle: heavy component tree or charting/contract logic shipped upfront.
- Late-loading hero section: delayed render of voting widget or GraphQL data fetch.
- Hydration cost: React mounts large dynamic tree (charts, delegators, wallet context).
- Third-party scripts: analytics or embed scripts running before interactivity.
π οΈ Recommended Actions (ordered by impact)
| Priority | Goal | Actions |
|---|---|---|
| 1οΈβ£ Improve LCP to < 2.5 s | Render critical content early | β’ Server-render the vote header & hero stats. β’ Defer non-critical charts using next/dynamic({ ssr:false }). |
| 2οΈβ£ Cut bundle size by > 70 % | Lower JS blocking time | β’ Run @next/bundle-analyzer.β’ Move heavy UI to Server Components. β’ Lazy-load rarely used widgets (voting modals, charts). |
| 3οΈβ£ Defer client work | Lower TBT/INP | β’ Load analytics afterInteractive.β’ Use React.startTransition for updates.β’ Split hydration via smaller islands. |
| 4οΈβ£ Cache data server-side | Speed up LCP & TTI | β’ Pre-render vote stats (ISR revalidate 10β30 s). β’ Parallelize GraphQL fetches. |
| 5οΈβ£ Trim assets | Reduce transfer size | β’ Drop unused libs and polyfills. β’ Verify images are compressed and cached. |
π― Target Benchmarks
| Metric | Current | Target | Ξ |
|---|---|---|---|
| LCP | 13.7 s | β€ 2.5 s | β82 % |
| TBT | 3.3 s | β€ 0.2 s | β94 % |
| TTI | 32 s | β€ 4 s | β88 % |
| JS transfer | 4.0 MB | β€ 0.5 MB gz | β88 % |
| CLS | 0.00 | β€ 0.10 | Maintain β |
Expected result: overall Lighthouse Performance Score β 0.56 β 0.93β0.95 once bundle size and LCP are optimized.
π Additional Steps
- Add
@vercel/analyticsto start collecting real LCP/INP/CLS field data. - Automate Lighthouse runs in CI for regression alerts.
- Re-test after lazy-loading graphs / reducing bundle size.
Compiled from 3 Lighthouse v13 mobile runs on 2025-11-12.
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done