Skip to content

Conversation

@n3ps
Copy link
Contributor

@n3ps n3ps commented Nov 6, 2025

Description

The Tokens tab has a significant delay before the page becomes interactive after clicking the tab. Every token was being rendered simultaneously, each calling multiple Redux selectors and several computations.

This PR implements virtualization using @tanstack/react-virtual to only render tokens that are visible in the viewport. In the video below this reduces render time from 924ms to 35ms (26x improvement).

Open in GitHub Codespaces

Changelog

CHANGELOG entry: feat: virtualize the Tokens list

Related issues

Fixes:

Manual testing steps

  1. Navigate to any tab other than Tokens
  2. Switch to Tokens tab

Screenshots/Recordings

Before

Virtual.BEFORE.mov

After

Virtual.AFTER.mov

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Virtualizes the Tokens list using @tanstack/react-virtual with a shared scroll container, updates asset cell/layout, and adjusts LavaMoat policies/globals.

  • UI/Performance:
    • Tokens list virtualization: Uses useVirtualizer from @tanstack/react-virtual in ui/components/app/assets/token-list/token-list.tsx to render only visible items and position them via translateY.
    • Scroll container: Adds ScrollContainer and useScrollContainer context in ui/contexts/scroll-container.tsx; wraps main container in ui/pages/home/home.component.js to provide the scroll element.
    • Asset layout tweaks:
      • Introduces ASSET_CELL_HEIGHT in ui/components/app/assets/constants.ts and applies it in generic-asset-cell-layout.tsx.
      • Simplifies asset-title.tsx by removing tooltip/explicit block display; keeps ellipsis via Text.
  • Dependencies:
    • Adds @tanstack/react-virtual to package.json.
  • Build/Security (LavaMoat):
    • Allows globals ResizeObserver, setTimeout, clearTimeout in build/plugin configs.
    • Updates LavaMoat policies to permit @tanstack/react-virtual and @tanstack/virtual-core with needed globals (document, scrollY, requestAnimationFrame, console.info/warn).

Written by Cursor Bugbot for commit 3bbae99. This will update automatically on new commits. Configure here.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 6, 2025

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot metamaskbot added the team-core-extension-ux Core Extension UX team label Nov 6, 2025
@github-actions github-actions bot added the size-S label Nov 6, 2025
@metamaskbot
Copy link
Collaborator

metamaskbot commented Nov 6, 2025

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/core-extension-ux (1 files, +3 -2)
  • 📁 ui/
    • 📁 pages/
      • 📁 home/
        • 📄 home.component.js +3 -2

🧩 @MetaMask/extension-devs (5 files, +90 -0)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +18 -0
      • 📁 experimental/
        • 📄 policy.json +18 -0
      • 📁 flask/
        • 📄 policy.json +18 -0
      • 📁 main/
        • 📄 policy.json +18 -0
    • 📁 webpack/
      • 📄 policy.json +18 -0

💎 @MetaMask/metamask-assets (4 files, +39 -33)
  • 📁 ui/
    • 📁 components/
      • 📁 app/
        • 📁 assets/
          • 📁 asset-list/
            • 📁 cells/
              • 📄 asset-title.tsx +0 -23
              • 📄 generic-asset-cell-layout.tsx +2 -1
          • 📁 token-list/
            • 📄 token-list.tsx +35 -9
            • 📄 constants.ts +2 -0

📜 @MetaMask/policy-reviewers (5 files, +90 -0)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +18 -0
      • 📁 experimental/
        • 📄 policy.json +18 -0
      • 📁 flask/
        • 📄 policy.json +18 -0
      • 📁 main/
        • 📄 policy.json +18 -0
    • 📁 webpack/
      • 📄 policy.json +18 -0

Tip

Follow the policy review process outlined in the LavaMoat Policy Review Process doc before expecting an approval from Policy Reviewers.


🔗 @MetaMask/supply-chain (5 files, +90 -0)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +18 -0
      • 📁 experimental/
        • 📄 policy.json +18 -0
      • 📁 flask/
        • 📄 policy.json +18 -0
      • 📁 main/
        • 📄 policy.json +18 -0
    • 📁 webpack/
      • 📄 policy.json +18 -0

@n3ps n3ps force-pushed the n3ps/tanstack-virtual branch from f5c7470 to 73c5dec Compare November 6, 2025 17:04
@github-actions github-actions bot added size-M and removed size-S labels Nov 6, 2025
@socket-security
Copy link

socket-security bot commented Nov 6, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​tanstack/​react-virtual@​3.13.121001006687100

View full report


return (
<div className="main-container main-container--has-shadow">
<ScrollContainer className="main-container main-container--has-shadow">
Copy link
Contributor Author

@n3ps n3ps Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Share a ref of the scrolling container

// TODO: Fix in https://github.com/MetaMask/metamask-extension/issues/31860
// eslint-disable-next-line @typescript-eslint/naming-convention
function TokenList({ onTokenClick, safeChains }: TokenListProps) {
const scrollContainerRef = useScrollContainer();
Copy link
Contributor Author

@n3ps n3ps Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Get the scrolling container

return (
<>
{sortedFilteredTokens.map((token: TokenWithFiatAmount) => {
<div
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. The list container


return (
<TokenCell
<div
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. The virtualized elements

@n3ps n3ps force-pushed the n3ps/tanstack-virtual branch from 7cdf6aa to 62c5367 Compare November 6, 2025 17:46
@n3ps
Copy link
Contributor Author

n3ps commented Nov 6, 2025

@MetaMask/supply-chain @tanstack/react-virtual is used here for the virtual scrolling in the Tokens list. Reviewed the policy changes and these are needed for scroll tracking and smooth scrolling.

@metamaskbot
Copy link
Collaborator

Builds ready [62c5367]
📊 Page Load Benchmark Results

Current Commit: 62c5367 | Date: 11/6/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±128ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 747ms (±150ms) 🟢 | historical mean value: 736ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 100ms (±220ms) 🟢 | historical mean value: 78ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 128ms 1.02s 2.31s 1.07s 2.31s
domContentLoaded 747ms 150ms 704ms 2.22s 753ms 2.22s
firstPaint 100ms 220ms 60ms 2.29s 88ms 2.29s
firstContentfulPaint 100ms 220ms 60ms 2.29s 88ms 2.29s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 17.62 KiB (0.24%)
  • common: 72 Bytes (0%)

@n3ps n3ps force-pushed the n3ps/tanstack-virtual branch from bd42c83 to 67ae764 Compare November 6, 2025 18:36
@metamaskbot
Copy link
Collaborator

Builds ready [67ae764]
📊 Page Load Benchmark Results

Current Commit: 67ae764 | Date: 11/6/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.07s (±101ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 756ms (±119ms) 🟢 | historical mean value: 730ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 96ms (±173ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.07s 101ms 1.02s 1.82s 1.30s 1.82s
domContentLoaded 756ms 119ms 702ms 1.75s 975ms 1.75s
firstPaint 96ms 173ms 64ms 1.82s 92ms 1.82s
firstContentfulPaint 96ms 173ms 64ms 1.82s 92ms 1.82s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 17.62 KiB (0.24%)
  • common: 72 Bytes (0%)

@n3ps n3ps force-pushed the n3ps/tanstack-virtual branch from c826997 to 446b78c Compare November 6, 2025 19:10
@MajorLift
Copy link
Contributor

@metamaskbot update-policies

@metamaskbot
Copy link
Collaborator

Builds ready [7db0573]
📊 Page Load Benchmark Results

Current Commit: 7db0573 | Date: 11/6/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.12s (±43ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 773ms (±39ms) 🟢 | historical mean value: 730ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 86ms (±12ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.12s 43ms 1.07s 1.37s 1.18s 1.37s
domContentLoaded 773ms 39ms 739ms 1.02s 822ms 1.02s
firstPaint 86ms 12ms 64ms 176ms 100ms 176ms
firstContentfulPaint 86ms 12ms 64ms 176ms 100ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 17.62 KiB (0.24%)
  • common: 72 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

@MajorLift
Copy link
Contributor

@metamaskbot update-policies

@metamaskbot
Copy link
Collaborator

Builds ready [1bde564]
📊 Page Load Benchmark Results

Current Commit: 1bde564 | Date: 11/6/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±41ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 721ms (±37ms) 🟢 | historical mean value: 730ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±12ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 41ms 1.01s 1.31s 1.05s 1.31s
domContentLoaded 721ms 37ms 699ms 982ms 741ms 982ms
firstPaint 76ms 12ms 60ms 176ms 84ms 176ms
firstContentfulPaint 76ms 12ms 60ms 176ms 84ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 17.62 KiB (0.24%)
  • common: 72 Bytes (0%)

@metamaskbot
Copy link
Collaborator

No policy changes

@n3ps n3ps force-pushed the n3ps/tanstack-virtual branch from a730f63 to a6a13fe Compare November 6, 2025 21:11
@metamaskbot
Copy link
Collaborator

Builds ready [f81e585]
UI Startup Metrics (1200 ± 94 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1200107016349412391355
load103688714268610801205
domContentLoaded103088014108510751196
domInteractive2314138191973
firstPaint65275126039010301108
backgroundConnect2272142507231243
firstReactRender23183942432
getState20769102243
initialActions001001
loadScripts809665118484852969
setupStore1072321014
numNetworkReqs1367619671
BrowserifyPower User HomeuiStartup15241337200821817602008
load912792126716811291267
domContentLoaded905786125816711231258
domInteractive341590307990
firstPaint74421812923068371292
backgroundConnect18416920511196205
firstReactRender28224562845
getState16011020424183204
initialActions001001
loadScripts73161710811619431081
setupStore1082341223
numNetworkReqs1187324759168247
WebpackStandard HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
WebpackPower User HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
FirefoxBrowserifyStandard HomeuiStartup14831302199912815111749
load1255111915718512981438
domContentLoaded1255111915708512981437
domInteractive1183641762120250
firstPaint------
backgroundConnect4527123165186
firstReactRender27227072745
getState74264718
initialActions001001
loadScripts1228110014717912741411
setupStore14871111433
numNetworkReqs1266315758
BrowserifyPower User HomeuiStartup22521909309742227443097
load14211201189425717721894
domContentLoaded14201201189325717721893
domInteractive22251632203540632
firstPaint------
backgroundConnect10933419117207419
firstReactRender41315474854
getState1507221344195213
initialActions101011
loadScripts13891179186024617111860
setupStore4262536538253
numNetworkReqs1336823363210233
WebpackStandard HomeuiStartup17501531249417517842147
load14831293203813515201774
domContentLoaded14821293203713515201774
domInteractive1143451869122240
firstPaint------
backgroundConnect59232453562124
firstReactRender31254553440
getState1155912854
initialActions002011
loadScripts14471275187612514931705
setupStore209154211760
numNetworkReqs16973181071
WebpackPower User HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
📊 Page Load Benchmark Results

Current Commit: f81e585 | Date: 11/6/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 988ms (±40ms) 🟢 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 686ms (±60ms) 🟢 | historical mean value: 729ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 79ms (±39ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 988ms 40ms 957ms 1.26s 1.02s 1.26s
domContentLoaded 686ms 60ms 659ms 1.23s 713ms 1.23s
firstPaint 79ms 39ms 64ms 464ms 84ms 464ms
firstContentfulPaint 79ms 39ms 64ms 464ms 84ms 464ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 64 Bytes (0%)
  • ui: 19.36 KiB (0.26%)
  • common: 73 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [c994326]
UI Startup Metrics (1216 ± 89 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1216107314448912511420
load105192912938510931243
domContentLoaded104592412878410881217
domInteractive2314114181869
firstPaint61188126541810441196
backgroundConnect2312182597235244
firstReactRender25184662840
getState2175992538
initialActions001001
loadScripts819680106084864988
setupStore1062431119
numNetworkReqs1367620674
BrowserifyPower User HomeuiStartup16791455267432919862674
load1058886179024311871790
domContentLoaded1046881176523811621765
domInteractive36141293732129
firstPaint83416418074359981807
backgroundConnect24021928916249289
firstReactRender28253632936
getState17615621316191213
initialActions001001
loadScripts81866514952279311495
setupStore1191411214
numNetworkReqs1167222148156221
WebpackStandard HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
WebpackPower User HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
FirefoxBrowserifyStandard HomeuiStartup15201295202412415651771
load1290112115538713501455
domContentLoaded1290112115528713501455
domInteractive1283343176123341
firstPaint------
backgroundConnect47271412153107
firstReactRender27214242739
getState11419122818
initialActions002001
loadScripts1262110615358613191429
setupStore1363561327
numNetworkReqs1266215758
BrowserifyPower User HomeuiStartup21381793339541622393395
load13841163174320616291743
domContentLoaded13841163174320616281743
domInteractive21986628190299628
firstPaint------
backgroundConnect973236690130366
firstReactRender453389145289
getState1303631559162315
initialActions102112
loadScripts13551134170820215761708
setupStore3661754244175
numNetworkReqs1327130473193304
WebpackStandard HomeuiStartup15691398207815115611932
load13451216170511413471621
domContentLoaded13441215170511413461621
domInteractive982730343112179
firstPaint------
backgroundConnect45211802748107
firstReactRender26216562836
getState11418420841
initialActions001011
loadScripts1316119716299813221561
setupStore175164201460
numNetworkReqs16878191173
WebpackPower User HomeuiStartup------
load------
domContentLoaded------
domInteractive------
firstPaint------
backgroundConnect------
firstReactRender------
getState------
initialActions------
loadScripts------
setupStore------
numNetworkReqs------
📊 Page Load Benchmark Results

Current Commit: c994326 | Date: 11/7/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±41ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 715ms (±38ms) 🟢 | historical mean value: 729ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 75ms (±14ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 41ms 1.01s 1.35s 1.05s 1.35s
domContentLoaded 715ms 38ms 697ms 1.02s 734ms 1.02s
firstPaint 75ms 14ms 60ms 200ms 84ms 200ms
firstContentfulPaint 75ms 14ms 60ms 200ms 84ms 200ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 64 Bytes (0%)
  • ui: 19.36 KiB (0.26%)
  • common: 73 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [c9dfa11]
UI Startup Metrics (1224 ± 95 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1224107214739512911399
load106293013299011331218
domContentLoaded105692613209011261209
domInteractive2214115171966
firstPaint66285132741510511190
backgroundConnect2302172809233242
firstReactRender27185372741
getState21876112440
initialActions001001
loadScripts833699109789898982
setupStore1062531119
numNetworkReqs1367419671
BrowserifyPower User HomeuiStartup16621452248531618572485
load1038912146521012561465
domContentLoaded1032906145620912501456
domInteractive42161444491144
firstPaint55415015003889221500
backgroundConnect2322192507234250
firstReactRender29245172851
getState17215221520188215
initialActions001001
loadScripts806681123220410191232
setupStore1292861128
numNetworkReqs1207025661169256
WebpackStandard HomeuiStartup801669118590815986
load57252093173567760
domContentLoaded56551491270561743
domInteractive161257101442
firstPaint18656844173182550
backgroundConnect261362122955
firstReactRender301765103553
getState1143141319
initialActions001001
loadScripts56251290469559735
setupStore1263051423
numNetworkReqs1367619871
WebpackPower User HomeuiStartup1035867153523011261535
load667568995141677995
domContentLoaded648557924122662924
domInteractive33131033176103
firstPaint31998928265570928
backgroundConnect49101685268168
firstReactRender28234962849
getState1335615930151159
initialActions001011
loadScripts644555914119660914
setupStore1162771127
numNetworkReqs1086920845165208
FirefoxBrowserifyStandard HomeuiStartup14581277188811414841715
load1249111916098312841425
domContentLoaded1249111816098312841425
domInteractive1183333252127249
firstPaint------
backgroundConnect4225174224866
firstReactRender25214852541
getState74506714
initialActions001001
loadScripts1225110015888012631386
setupStore12687101228
numNetworkReqs1266315856
BrowserifyPower User HomeuiStartup21221784305438925133054
load13641151180621316041806
domContentLoaded13641151180621316031806
domInteractive20591528156428528
firstPaint------
backgroundConnect1062939299202392
firstReactRender452866125466
getState1148117625137176
initialActions001011
loadScripts13331134176820715611768
setupStore3561524360152
numNetworkReqs1357031383201313
WebpackStandard HomeuiStartup16391446233115817041989
load13981210179811114761612
domContentLoaded13971210179711114751612
domInteractive1133139369118335
firstPaint------
backgroundConnect50221302653119
firstReactRender302376113164
getState10314620718
initialActions001001
loadScripts13661185170410414261583
setupStore197222331357
numNetworkReqs1367016762
WebpackPower User HomeuiStartup23101958319142526053191
load15781318189620218201896
domContentLoaded15781317189620218191896
domInteractive17747465153410465
firstPaint------
backgroundConnect1143831495170314
firstReactRender42315564555
getState1177818531123185
initialActions102012
loadScripts15371295183418617761834
setupStore3971544759154
numNetworkReqs1326824062198240
📊 Page Load Benchmark Results

Current Commit: c9dfa11 | Date: 11/7/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±83ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 739ms (±79ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±13ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 83ms 1.01s 1.38s 1.34s 1.38s
domContentLoaded 739ms 79ms 699ms 1.04s 1.01s 1.04s
firstPaint 78ms 13ms 60ms 184ms 92ms 184ms
firstContentfulPaint 78ms 13ms 60ms 184ms 92ms 184ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 375 Bytes (0.01%)
  • ui: 19.98 KiB (0.27%)
  • common: 271 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [c6411c3]
UI Startup Metrics (1162 ± 101 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1162982146210112221341
load100085012459010681148
domContentLoaded99384512388910611143
domInteractive201277141757
firstPaint66292116238710231086
backgroundConnect1881752237191201
firstReactRender24174662737
getState21672112443
initialActions001001
loadScripts812668102888880969
setupStore1162131118
numNetworkReqs1367520672
BrowserifyPower User HomeuiStartup16801461232728719662327
load1078909164223613781642
domContentLoaded1067902162823013711628
domInteractive451519151100191
firstPaint73517914794059531479
backgroundConnect24622428717262287
firstReactRender28253533035
getState17215222817179228
initialActions001011
loadScripts837680137522311411375
setupStore11101411114
numNetworkReqs1207125174242251
WebpackStandard HomeuiStartup812696114381818991
load60255791269597739
domContentLoaded59554789666591721
domInteractive171274131449
firstPaint21859899213196722
backgroundConnect241278142655
firstReactRender29185993437
getState1163041317
initialActions001001
loadScripts59254588664589711
setupStore1163651316
numNetworkReqs1367419670
WebpackPower User HomeuiStartup1050871161627013791616
load655573936120794936
domContentLoaded638562894110762894
domInteractive301285297585
firstPaint29963897233566897
backgroundConnect641025480167254
firstReactRender26232822728
getState1389416222153162
initialActions001001
loadScripts634560884106751884
setupStore1162571625
numNetworkReqs1116916839163168
FirefoxBrowserifyStandard HomeuiStartup14621285206212915171724
load1245111714798413111401
domContentLoaded1244111714788413111401
domInteractive1163633051121236
firstPaint------
backgroundConnect48252173054103
firstReactRender25216652631
getState74334616
initialActions001001
loadScripts1216108514568112841368
setupStore1475381431
numNetworkReqs1266315759
BrowserifyPower User HomeuiStartup20921817287030322682870
load13841176198123316671981
domContentLoaded13831176198123316671981
domInteractive21687662197503662
firstPaint------
backgroundConnect883121948127219
firstReactRender433470114570
getState1066314923121149
initialActions001011
loadScripts13521131195323216281953
setupStore3552766334276
numNetworkReqs1337221459199214
WebpackStandard HomeuiStartup16251465208012116571953
load1398123817369914421651
domContentLoaded1398123817359914421650
domInteractive1023239447112193
firstPaint------
backgroundConnect49251372453118
firstReactRender3223105163079
getState73424714
initialActions001001
loadScripts1364121716449414021580
setupStore15694141353
numNetworkReqs1366916764
WebpackPower User HomeuiStartup22761847320246427003202
load15561297206925617912069
domContentLoaded15561297206925617912069
domInteractive21741737230456737
firstPaint------
backgroundConnect912920362182203
firstReactRender443280114980
getState1227625243143252
initialActions001011
loadScripts15161278202425617612024
setupStore3662175362217
numNetworkReqs1356932482208324
📊 Page Load Benchmark Results

Current Commit: c6411c3 | Date: 11/7/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±42ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 728ms (±39ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 79ms (±16ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 42ms 1.02s 1.38s 1.07s 1.38s
domContentLoaded 728ms 39ms 706ms 1.04s 744ms 1.04s
firstPaint 79ms 16ms 60ms 228ms 84ms 228ms
firstContentfulPaint 79ms 16ms 60ms 228ms 84ms 228ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 375 Bytes (0.01%)
  • ui: 19.98 KiB (0.27%)
  • common: 271 Bytes (0%)

@n3ps n3ps marked this pull request as ready for review November 7, 2025 18:09
@n3ps n3ps requested review from a team as code owners November 7, 2025 18:09
@metamaskbot
Copy link
Collaborator

Builds ready [3bbae99]
UI Startup Metrics (1223 ± 88 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1223107215318812821409
load105793013258311081238
domContentLoaded105092713198110991231
domInteractive231485172074
firstPaint679118129642010711199
backgroundConnect2322192678236249
firstReactRender25184862641
getState20777102537
initialActions001001
loadScripts8247101081818751009
setupStore1062031118
numNetworkReqs1367619673
BrowserifyPower User HomeuiStartup16941468216325220712163
load1064907151120713401511
domContentLoaded1054899149220213081492
domInteractive40151364090136
firstPaint74025415284419661528
backgroundConnect24622528318261283
firstReactRender302472112872
getState17315321016184210
initialActions002102
loadScripts822671124719610561247
setupStore14103171231
numNetworkReqs1417534283220342
WebpackStandard HomeuiStartup8517161322988611122
load623570106082616869
domContentLoaded616565103678611849
domInteractive1812130161454
firstPaint207581040205199759
backgroundConnect261180152764
firstReactRender31186493642
getState1273041319
initialActions001001
loadScripts613563102576608838
setupStore1263041420
numNetworkReqs1367620871
WebpackPower User HomeuiStartup1025868160222910811602
load64756310641337161064
domContentLoaded622553959110664959
domInteractive291388286188
firstPaint34274962290709962
backgroundConnect57102425966242
firstReactRender26242812728
getState1359715219148152
initialActions001011
loadScripts618551949107655949
setupStore1163081230
numNetworkReqs1047119242163192
FirefoxBrowserifyStandard HomeuiStartup14601291204813214991692
load1248111715108612941432
domContentLoaded1248111615108612941431
domInteractive1203437257121277
firstPaint------
backgroundConnect4524199255099
firstReactRender26218382646
getState8421821713
initialActions001001
loadScripts1222109914908012671395
setupStore145280271228
numNetworkReqs1267316758
BrowserifyPower User HomeuiStartup21081792273528023832735
load13941147168418216201684
domContentLoaded13941146168418216201684
domInteractive19558520150408520
firstPaint------
backgroundConnect1292926088233260
firstReactRender41316394863
getState1358118333167183
initialActions001011
loadScripts13321128163317515461633
setupStore2561493325149
numNetworkReqs1347030774209307
WebpackStandard HomeuiStartup15931413228817316122002
load13661199171011514121645
domContentLoaded13651198171011514111645
domInteractive1003137344111179
firstPaint------
backgroundConnect49202423350126
firstReactRender292177112972
getState10418723725
initialActions001001
loadScripts13341181160010013841563
setupStore187232271472
numNetworkReqs1366918767
WebpackPower User HomeuiStartup22941841291034026802910
load15611255188117116971881
domContentLoaded15611255188117116961881
domInteractive18150577163283577
firstPaint------
backgroundConnect903120259140202
firstReactRender432971114971
getState1276423852181238
initialActions20297129
loadScripts15181235183416916321834
setupStore4962677386267
numNetworkReqs1326726172236261
📊 Page Load Benchmark Results

Current Commit: 3bbae99 | Date: 11/7/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±37ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 722ms (±35ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±11ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 37ms 1.01s 1.31s 1.05s 1.31s
domContentLoaded 722ms 35ms 700ms 979ms 736ms 979ms
firstPaint 77ms 11ms 64ms 176ms 84ms 176ms
firstContentfulPaint 77ms 11ms 64ms 176ms 84ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 17.63 KiB (0.24%)
  • common: 63 Bytes (0%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size-M team-core-extension-ux Core Extension UX team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants