Skip to content

feat(dev): frontend browser metrics report#17630

Draft
syuilo wants to merge 27 commits into
developfrom
frontend-browser-metrics-workflow-2
Draft

feat(dev): frontend browser metrics report#17630
syuilo wants to merge 27 commits into
developfrom
frontend-browser-metrics-workflow-2

Conversation

@syuilo

@syuilo syuilo commented Jun 27, 2026

Copy link
Copy Markdown
Member

What

GitHub Actions上でブラウザを立ち上げてアカウント作成→投稿までを行い、実際の通信量などの統計を確認できるようにする

Why

既にバンドル情報をレポートするワークフローはあるが、それよりも実際の環境に近い値を確認できる

Additional info (optional)

TODO

ブラウザ操作関連のロジックは当workflow固有のものではないのでユーティリティファイルに分離

差分のリクエスト詳細情報表示(別html)

画像なども含めた全体のメモリ使用量

websocket接続数

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

Sample:

🖥 Frontend Browser Metrics

Metric Base Head Δ median Δ MAD Δ min Δ max
Requests 235 234 $\color{green}{\text{-1}}$ 0 $\color{green}{\text{-1}}$ $\color{orange}{\text{+1}}$
Encoded network 3.3 MB 3.3 MB $\text{+7 B}$ 3 B $\text{-14 B}$ $\text{+16 B}$
Decoded body 3.1 MB 3.1 MB 0 B 0 B 0 B 0 B
Same-origin encoded 3.2 MB 3.2 MB 0 B 0 B 0 B 0 B
Third-party encoded 150 KB 150 KB $\text{+7 B}$ 3 B $\text{-14 B}$ $\text{+16 B}$
Script encoded 2.2 MB 2.2 MB 0 B 0 B 0 B 0 B
Stylesheet encoded 291 KB 291 KB 0 B 0 B 0 B 0 B
Fetch/XHR encoded 16 KB 16 KB 0 B 0 B 0 B 0 B
Image encoded 254 KB 254 KB 0 B 0 B 0 B 0 B
Font encoded 118 KB 118 KB 0 B 0 B 0 B 0 B
WebSocket connections 2 2 0 0 0 0
WebSocket sent 329 B 329 B 0 B 0 B 0 B 0 B
WebSocket received 1.1 KB 1.1 KB 0 B 0 B $\text{-134 B}$ 0 B

View details

Requests by resource type
Type Requests Encoded bytes
Base Head Δ Base Head Δ
Document 2 2 0 33 KB 33 KB 0 B
Script 138 138 0 2.2 MB 2.2 MB 0 B
Stylesheet 54 54 0 291 KB 291 KB 0 B
Fetch 17 17 0 16 KB 16 KB 0 B
Image 10 10 0 254 KB 254 KB 0 B
Font 2 2 0 118 KB 118 KB 0 B
Other 10 10 0 378 KB 378 KB $\color{orange}{\text{+4 B}}$
Manifest 2 2 0 1.7 KB 1.7 KB 0 B
V8 heap snapshot statistics
Metric Base Head Δ median Δ MAD Δ min Δ max
$\color{gray}{\rule{8pt}{8pt}}$ Total 8.8 MB
± 7.1 KB
8.8 MB
± 7.3 KB
$\text{-8.5 KB}$
$\text{-0.1\%}$
3.3 KB $\text{-12 KB}$ $\color{orange}{\text{+105 KB}}$
$\color{orange}{\rule{8pt}{8pt}}$ Code25.7% → 25.7%
2.3 MB 2.3 MB $\text{-2.1 KB}$ 3 KB $\text{-23 KB}$ $\text{+872 B}$
$\color{red}{\rule{8pt}{8pt}}$ Strings6% → 6%
528 KB 528 KB $\text{+44 B}$ 32 B $\text{-544 B}$ $\text{+344 B}$
$\color{cyan}{\rule{8pt}{8pt}}$ JS arrays1.1% → 1.1%
101 KB 101 KB 0 B 0 B 0 B $\text{+4.3 KB}$
$\color{green}{\rule{8pt}{8pt}}$ Typed arrays0% → 0%
0 B 0 B 0 B 0 B 0 B 0 B
$\color{yellow}{\rule{8pt}{8pt}}$ System objects0% → 0%
0 B 0 B 0 B 0 B 0 B 0 B
$\color{violet}{\rule{8pt}{8pt}}$ Other JS objs18.4% → 18.4%
1.6 MB 1.6 MB $\text{+76 B}$ 76 B $\text{-1.7 KB}$ $\text{+49 KB}$
$\color{pink}{\rule{8pt}{8pt}}$ Other non-JS objs48.7% → 48.8%
4.3 MB 4.3 MB $\text{+12 KB}$ 21 KB $\text{-10 KB}$ $\text{+73 KB}$
Head heap snapshot composition
%%{init: {"sankey":{"showValues":false,"linkColor":"target","labelStyle":"outlined","nodeAlignment":"center","nodePadding":10,"nodeColors":{"Head":"#888888","code":"#f28e2c","system / InstructionStream":"#f28e2c","Other":"#888888","strings":"#e15759","jsArrays":"#76b7b2","otherJsObjects":"#af7aa1","array":"#af7aa1","otherNonJsObjects":"#ff9da7","Extra native bytes":"#ff9da7","system / ExternalStringData":"#ff9da7"}}}}%%
sankey-beta
"Head","Code",25.69
"Code","system / InstructionStream",13.09
"Code","Other",12.6
"Head","Strings",5.98
"Head","JS arrays",1.15
"Head","Other JS objs",18.4
"Other JS objs","array",5.76
"Other JS objs","Other",12.64
"Head","Other non-JS objs",48.75
"Other non-JS objs","Extra native bytes",18.79
"Other non-JS objs","system / ExternalStringData",18.7
"Other non-JS objs","Other",11.26
Loading

Download representative head heap snapshot

@syuilo syuilo changed the title wip feat(dev): frontend browser metrics report Jun 27, 2026
@kakkokari-gtyih

Copy link
Copy Markdown
Member

github actions上でやるべきなのか、e2e(Cypress)の再整備をしつつそちらのメモリ使用量を取ってくるようにするべきなのかは検討の余地がありそう

@samunohito

Copy link
Copy Markdown
Member

github actions上でやるべきなのか、e2e(Cypress)の再整備をしつつそちらのメモリ使用量を取ってくるようにするべきなのか

測定用途なら、Playwrightを使って測定するのが良いかと思います(それをGitHubActionsの上でやるイメージ)。
Cypressはテスト対象をiframeの中に埋め込んで動かす形なので、Cypressそのものの影響が混ざりやすそうです。
一方で、Playwrightはテスト対象をそのまま開いて外部から操作する形なので、この用途に合うと思います

@kakkokari-gtyih

Copy link
Copy Markdown
Member

(Cypressによるfrontend e2eを、Playwright + Vitest Browser Modeに置き換えるという手もある)

@samunohito

Copy link
Copy Markdown
Member

(たぶんCypressをメンテするよりそっちの方が良い)

@github-actions github-actions Bot added the packages/backend Server side specific issue/PR label Jun 28, 2026
@codecov

codecov Bot commented Jun 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 24.95%. Comparing base (9f61451) to head (80b5ec6).

Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #17630      +/-   ##
===========================================
- Coverage    25.22%   24.95%   -0.28%     
===========================================
  Files         1164     1162       -2     
  Lines        39957    39744     -213     
  Branches     11130    11084      -46     
===========================================
- Hits         10079     9917     -162     
+ Misses       23926    23880      -46     
+ Partials      5952     5947       -5     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

このPRによるapi.jsonの差分
差分はありません。
Get diff files from Workflow Page

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

📦 Frontend Bundle Report

Chunk size diff (0 updated, 0 added, 0 removed)

No data

Startup chunk size (0 updated, 0 added, 0 removed)
Chunk Before After Δ Δ (%)
(total) 1.1 MB 1.1 MB 0 B 0%
os ja-JP/oaynS8Knu-D59KcMRK.js
466 KB 466 KB 0 B 0%
i18n ja-JP/oaynS8Knu-BXllwDnr.js
216 KB 216 KB 0 B 0%
photoswipe ja-JP/oaynS8Knu-OMfijBv8.js
73 KB 73 KB 0 B 0%
src/_boot_.ts ja-JP/oaynS8Knu-BIAM45_9.js
63 KB 63 KB 0 B 0%
runtime-core.esm-bundler ja-JP/oaynS8Knu-v_kYKDkM.js
50 KB 50 KB 0 B 0%
MkNotification ja-JP/oaynS8Knu-D2ghYAX92.js
23 KB 23 KB 0 B 0%
built ja-JP/oaynS8Knu-DaYzER0Z.js
21 KB 21 KB 0 B 0%
reactivity.esm-bundler ja-JP/oaynS8Knu-CSrO7js8.js
21 KB 21 KB 0 B 0%
store ja-JP/oaynS8Knu-BtKU7PnB.js
18 KB 18 KB 0 B 0%
runtime-dom.esm-bundler ja-JP/oaynS8Knu-C7PP-tAz.js
17 KB 17 KB 0 B 0%
tinycolor ja-JP/oaynS8Knu-PEGdpOg42.js
15 KB 15 KB 0 B 0%
achievements ja-JP/oaynS8Knu-BqoUlyZC.js
10 KB 10 KB 0 B 0%
widgets ja-JP/oaynS8Knu-D3ugPNzd.js
9.7 KB 9.7 KB 0 B 0%
theme ja-JP/oaynS8Knu-sIFN8Vp62.js
8.3 KB 8.3 KB 0 B 0%
MkCustomEmoji ja-JP/oaynS8Knu-Cd0r4aQI2.js
6.5 KB 6.5 KB 0 B 0%
MkAnimBg ja-JP/oaynS8Knu-Dfu90kEK2.js
4.8 KB 4.8 KB 0 B 0%
common ja-JP/oaynS8Knu-W5f1Tuef2.js
4 KB 4 KB 0 B 0%
MkSwiper ja-JP/oaynS8Knu-DhCow9ut2.js
3 KB 3 KB 0 B 0%
navbar ja-JP/oaynS8Knu-x6AVnlsK.js
2.9 KB 2.9 KB 0 B 0%
MkUrl ja-JP/oaynS8Knu-B4RNseWt2.js
2.9 KB 2.9 KB 0 B 0%
MkTabs ja-JP/oaynS8Knu-C3kK3d0B2.js
2.8 KB 2.8 KB 0 B 0%
MkCode ja-JP/oaynS8Knu-1eSo3Lf22.js
2.7 KB 2.7 KB 0 B 0%
lookup ja-JP/oaynS8Knu-DAqs5ckv2.js
2.3 KB 2.3 KB 0 B 0%
MkSparkle ja-JP/oaynS8Knu-Dh3rC5GE2.js
2.2 KB 2.2 KB 0 B 0%
dist ja-JP/oaynS8Knu-IbAMbJNv.js
1.8 KB 1.8 KB 0 B 0%
_dark ja-JP/oaynS8Knu-DfGzfoC32.js
1.8 KB 1.8 KB 0 B 0%
media-proxy ja-JP/oaynS8Knu-erjsisc4.js
1.7 KB 1.7 KB 0 B 0%
_light ja-JP/oaynS8Knu-D67CB4xl.js
1.7 KB 1.7 KB 0 B 0%
hotkey ja-JP/oaynS8Knu-DhpuGRpR.js
1.6 KB 1.6 KB 0 B 0%
is-birthday ja-JP/oaynS8Knu-l_yS9sHW2.js
1.5 KB 1.5 KB 0 B 0%
MkStickyContainer ja-JP/oaynS8Knu-BICKXuNT2.js
1.4 KB 1.4 KB 0 B 0%
config ja-JP/oaynS8Knu-BooIHWtE.js
1.3 KB 1.3 KB 0 B 0%
preload-helper ja-JP/oaynS8Knu-DyAp3Zfi.js
1.3 KB 1.3 KB 0 B 0%
MkLoading ja-JP/oaynS8Knu-DndTpCB22.js
1.1 KB 1.1 KB 0 B 0%
MkInfo ja-JP/oaynS8Knu-Cj7wWYSz.js
1 KB 1 KB 0 B 0%
webgl ja-JP/oaynS8Knu-wb3e_Vqx2.js
1 KB 1 KB 0 B 0%
use-scroll-position-keeper ja-JP/oaynS8Knu-CNj1wfn72.js
990 B 990 B 0 B 0%
misskey-api ja-JP/oaynS8Knu-BebHi7Dz.js
986 B 986 B 0 B 0%
instance ja-JP/oaynS8Knu-BaNW73x8.js
918 B 918 B 0 B 0%
get-note-summary ja-JP/oaynS8Knu-CJpildG3.js
704 B 704 B 0 B 0%
rolldown-runtime ja-JP/oaynS8Knu-QTnfLwEv.js
694 B 694 B 0 B 0%
page ja-JP/oaynS8Knu-DVxDvZ4C.js
688 B 688 B 0 B 0%
i ja-JP/oaynS8Knu-AFJdxzxK.js
631 B 631 B 0 B 0%
clear-cache ja-JP/oaynS8Knu-BHOxi4iX2.js
472 B 472 B 0 B 0%
emoji-base ja-JP/oaynS8Knu-BVbfT0gI2.js
413 B 413 B 0 B 0%
d-green-lime ja-JP/oaynS8Knu-DEHvjKGz.js
391 B 391 B 0 B 0%
use-interval ja-JP/oaynS8Knu-B5BnI2fD.js
384 B 384 B 0 B 0%
l-light ja-JP/oaynS8Knu-B8GJAiDX.js
351 B 351 B 0 B 0%
user ja-JP/oaynS8Knu-DDIf-bad.js
205 B 205 B 0 B 0%
get-bg-color ja-JP/oaynS8Knu-DpyGyEl72.js
190 B 190 B 0 B 0%
isChromatic ja-JP/oaynS8Knu-Dd9satMa2.js
172 B 172 B 0 B 0%
is-device-darkmode ja-JP/oaynS8Knu-CHGi6RJT2.js
93 B 93 B 0 B 0%
_plugin-vue_export-helper ja-JP/oaynS8Knu-BDNMzG2s.js
84 B 84 B 0 B 0%

Startup chunks are the Vite entry for src/_boot_.ts and its static imports.

Bundle Stats

Bundles Modules Entries Imports Size
Static Dynamic Rendered Gzip Brotli
Before 466 2,851 21 8,574 324 10 MB 2.8 MB 2.4 MB
After 466 2,851 21 8,574 324 10 MB 2.8 MB 2.4 MB
Δ 0 0 0 0 0 $\text{-101 B}$ $\text{-65 B}$ $\text{+20 B}$
Δ (%) 0% 0% 0% 0% 0% $\text{-0\%}$ $\text{-0\%}$ $\text{+0\%}$

Open treemap HTML

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

⚙️ Backend Memory Usage Report

After GC

Metric Base Head Δ median Δ MAD Δ min Δ max
HeapUsed 83.8 MB
± 0 MB
83.8 MB
± 0 MB
$\text{+0 MB}$
$\text{+0\%}$
0 MB $\text{-0.1 MB}$ $\text{+0.1 MB}$
Pss 311 MB
± 1.7 MB
308.1 MB
± 1.9 MB
$\color{green}{\text{-3.2 MB}}$
$\color{green}{\text{-1\%}}$
3.6 MB $\color{green}{\text{-9.5 MB}}$ $\color{orange}{\text{+0.4 MB}}$
Private_Dirty 267.8 MB
± 1.6 MB
265.2 MB
± 1.2 MB
$\color{green}{\text{-3 MB}}$
$\color{green}{\text{-1.1\%}}$
3 MB $\color{green}{\text{-9.5 MB}}$ $\text{-0 MB}$
VmRSS 348.8 MB
± 1.7 MB
345.9 MB
± 1.5 MB
$\color{green}{\text{-3.2 MB}}$
$\color{green}{\text{-0.9\%}}$
3.2 MB $\color{green}{\text{-9.6 MB}}$ $\text{-0 MB}$
External 10.7 MB
± 0 MB
10.7 MB
± 0 MB
0 MB
0%
0 MB 0 MB 0 MB

V8 Heap Snapshot Statistics

Metric Base Head Δ median Δ MAD Δ min Δ max
$\color{gray}{\rule{8pt}{8pt}}$ Total 102 MB
± 23 KB
102 MB
± 14 KB
$\text{+3.2 KB}$
$\text{+0\%}$
44 KB $\text{-61 KB}$ $\text{+49 KB}$
$\color{orange}{\rule{8pt}{8pt}}$ Code24.5% → 24.5%
25 MB 25 MB $\text{+4.2 KB}$ 5 KB $\text{-856 B}$ $\text{+30 KB}$
$\color{red}{\rule{8pt}{8pt}}$ Strings42.1% → 42.2%
43 MB 43 MB $\text{-1.3 KB}$ 1.1 KB $\text{-2.4 KB}$ $\text{+120 B}$
$\color{cyan}{\rule{8pt}{8pt}}$ JS arrays4.1% → 4.1%
4.1 MB 4.1 MB 0 B 0 B 0 B 0 B
$\color{green}{\rule{8pt}{8pt}}$ Typed arrays0.5% → 0.5%
533 KB 533 KB 0 B 0 B 0 B 0 B
$\color{yellow}{\rule{8pt}{8pt}}$ System objects2.2% → 2.2%
2.2 MB 2.2 MB $\text{-1.3 KB}$ 6 KB $\text{-7.3 KB}$ $\text{+9.5 KB}$
$\color{violet}{\rule{8pt}{8pt}}$ Other JS objs26.6% → 26.5%
27 MB 27 MB $\text{+4.2 KB}$ 6.9 KB $\text{-51 KB}$ $\text{+11 KB}$
$\color{pink}{\rule{8pt}{8pt}}$ Other non-JS objs0% → 0%
37 KB 37 KB 0 B 0 B 0 B 0 B
Head heap snapshot composition
%%{init: {"sankey":{"showValues":false,"linkColor":"target","labelStyle":"outlined","nodeAlignment":"center","nodePadding":10,"nodeColors":{"Head":"#888888","code":"#f28e2c","bytecode":"#f28e2c","Other":"#888888","strings":"#e15759","string":"#e15759","jsArrays":"#76b7b2","typedArrays":"#59a14f","systemObjects":"#edc949","otherJsObjects":"#af7aa1","array":"#af7aa1","otherNonJsObjects":"#ff9da7"}}}}%%
sankey-beta
"Head","Code",24.51
"Code","bytecode",8.1
"Code","Other",16.42
"Head","Strings",42.15
"Strings","string",41.58
"Strings","Other",0.57
"Head","JS arrays",4.06
"Head","Typed arrays",0.52
"Head","System objects",2.17
"Head","Other JS objs",26.55
"Other JS objs","array",9.74
"Other JS objs","Other",16.8
"Head","Other non-JS objs",0.04
Loading

Download representative V8 heap snapshot (head)

Runtime Loaded JS Footprint

Click to show
Metric Base Head Δ Δ (%)
Loaded JS modules 150 150 0 0%
Loaded JS source 13 MB 13 MB 0 B 0%
External packages loaded 19 19 0 0%
Native addon packages 2 2 0 0%

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

Labels

packages/backend Server side specific issue/PR

Projects

Development

Successfully merging this pull request may close these issues.

3 participants