perf-optimizer

安装量: 49
排名: #15029

安装

npx skills add https://github.com/onekeyhq/app-monorepo --skill perf-optimizer
Performance Optimizer
Systematic workflow for diagnosing and fixing performance issues in the OneKey mobile app using the perf-ci infrastructure and performance-server tooling.
Overview
This skill provides a structured iterative approach to:
Establish performance baselines from existing sessions
Run controlled perf measurements (3 runs, median aggregation)
Analyze session data to identify bottlenecks
Make targeted code changes
Verify improvements against thresholds
Document all changes and results
Key Metrics:
tokensStartMs
Time when Home tokens refresh starts (lower is better)
tokensSpanMs
Duration of Home tokens refresh (lower is better)
functionCallCount
Total function calls during session (lower is better)
Success Criteria:
SUCCESS
Time metrics improve by ≥10%
🌟
MINOR_IMPROVEMENT
Time unchanged but function calls reduce by ≥20% (safe, small-scope changes)
NO_IMPROVEMENT
Neither threshold met → revert changes Workflow Phase 1: Setup and Baseline Step 1.1: Select Baseline Session Ask user to choose a baseline session or help them select one:

List recent sessions with key metrics

cat ~/perf-sessions/sessions.overview.jsonl | \ jq -r '[.sessionId, .createdAt, .marks["Home:refresh:done:tokens"]] | @tsv' | \ tail -20 User can specify: A known good session (for regression fixes) A recent session (for improvement work) Let you choose a representative session Step 1.2: Analyze Baseline Extract baseline metrics from the session:

Get detailed analysis

node development/performance-server/cli/derive-session.js < baseline-sessionId

\ --pretty \ --output /tmp/perf-baseline-derived.json Read baseline metrics from ~/perf-sessions//mark.log :

Extract tokensStartMs (timestamp of Home:refresh:start:tokens)

grep "Home:refresh:start:tokens" ~/perf-sessions/ < sessionId

/mark.log | jq '.timestamp'

Extract tokensSpanMs (done - start)

grep "Home:refresh:done:tokens" ~/perf-sessions/ < sessionId

/mark.log | jq '.timestamp'

Count function calls

wc -l < ~/perf-sessions/ < sessionId

/function_call.log Create baseline metrics JSON for comparison: echo '{"tokensStartMs": , "tokensSpanMs": , "functionCallCount": }'

/tmp/baseline-metrics.json Step 1.3: Initialize Documentation Create session document at development/output/perf-optimization-.md using the template from references/template.md . Fill in: Current date/time Baseline session ID Baseline metrics Current branch name Target (regression fix or improvement) Phase 2: Iterative Optimization Loop Maximum iterations: 10 For each iteration (run in a sub-agent): Step 2.1: Run Performance Tests The perf script automatically runs 3 times and aggregates results: node development/perf-ci/run-ios-perf-detox-release.js Output location: development/perf-ci/output// report.json - Contains aggregated results in agg field detox/runs.json - Contains individual run sessionIds Extract current metrics from report.json :

Read aggregated metrics directly

cat development/perf-ci/output/ < jobId

/report.json | jq '{ tokensStartMs: .agg.tokensStartMs, tokensSpanMs: .agg.tokensSpanMs, functionCallCount: .agg.functionCallCount }'

/tmp/current-metrics.json Step 2.2: Analyze Current Performance For deeper analysis, run derive-session on individual sessions:

Get sessionIds from the run

SESSIONS

$( cat development/perf-ci/output/ < jobId

/detox/runs.json | jq -r '.runs[].sessionId' )

Analyze each session

for
sid
in
$SESSIONS
;
do
node
development/performance-server/cli/derive-session.js
$sid
\
--pretty
\
--output
/tmp/perf-derived-
$sid
.json
done
Focus on these sections in the derived output:
slowFunctions
Functions taking the most cumulative time
homeRefreshTokens
What's consuming time in the critical refresh window
jsblock
Main thread blocks causing delays
repeatedCalls
Thrashing patterns or excessive re-renders
keyMarks
Critical milestone timing Identify top 1-3 bottlenecks that are: Taking significant time Potentially optimizable Within the critical path (Home refresh flow) Step 2.3: Determine Action Compare current metrics to baseline:

Quick comparison

cat /tmp/baseline-metrics.json cat /tmp/current-metrics.json

Calculate deltas manually or use script in skill directory

Decision tree:
If current metrics show improvement over baseline:
SUCCESS
(≥10% time improvement) →
STOP
, document success
🌟
MINOR_IMPROVEMENT
(≥20% function call reduction, time stable) → Create branch, commit, return to main branch, continue
If no improvement yet:
Continue to Step 2.4 (make changes)
If iteration count reaches 10:
Document findings and stop
Step 2.4: Make Code Changes
Based on analysis, make
ONE
targeted change per iteration:
Change types:
Optimization
Remove redundant work, cache results, reduce allocations
Add perfMark
Add marks to understand unclear bottlenecks better
Both
Add marks + optimize in same area
Guidelines:
One change at a time (unless analysis proves multiple changes must work together)
Small, focused changes
Safe changes only (never break functionality)
Document rationale clearly
Adding perfMarks:
Use the performance utilities in
packages/shared/src/performance/
:
import
{
perfMark
}
from
'@onekeyhq/shared/src/performance/perfMark'
;
// Add mark at a specific point
perfMark
(
'MyComponent:operation:start'
)
;
// ... operation ...
perfMark
(
'MyComponent:operation:done'
)
;
Naming convention:
::
(e.g.,
Home:refresh:start:tokens
)
If adding perfMarks for investigation:
Add marks around suspected bottleneck
Run one perf cycle with marks
Analyze new data with marks visible
Then make code optimization
Verify with another perf cycle
Step 2.5: Document Iteration
Update the session document with:
Analysis
Job ID, session IDs, median metrics, key findings from derive-session
Code Changes
File, location, change type, description, rationale
Verification Results
New job ID, metrics, deltas vs previous/baseline, verdict, action taken
Phase 3: Finalization
Step 3.1: Handle MINOR_IMPROVEMENT Branch
If any iterations resulted in MINOR_IMPROVEMENT:
git
checkout
-b
perf/minor-
<
description
>
git
add
<
changed-files
>
git
commit
-m
"perf:
Reduces function call count by X% while maintaining time metrics.
Reason:
"
git
checkout
<
original-branch
>
git
restore
.
Document the branch name in the session document.
Step 3.2: Complete Documentation
Fill in the Summary section:
Total iterations run
Final result (SUCCESS with % improvement, or still investigating)
List all effective changes
List all ineffective changes with reasons
List any branches created
Next steps if incomplete
Key Files and Paths
Perf Infrastructure:
development/perf-ci/run-ios-perf-detox-release.js
- Main perf runner
development/perf-ci/output//
- Job output directory
development/performance-server/cli/derive-session.js
- Session analyzer
~/perf-sessions/
- Session data storage (default)
~/perf-sessions/sessions.overview.jsonl
- Session index
Thresholds:
development/perf-ci/thresholds/ios.release.json
- Release mode thresholds
Performance Utilities:
packages/shared/src/performance/perfMark.ts
- Performance marking utility
References
references/template.md
Session documentation template
references/perf_tool_guide.md
Detailed guide to derive-session and analysis tools Important Notes Run each optimization loop in a sub-agent to avoid context bloat Never commit changes unless SUCCESS or MINOR_IMPROVEMENT Always document failed attempts - helps avoid repeating ineffective changes Trust the data - if metrics don't improve, revert even if change "should" help Be patient - each perf run takes significant time (build + 3 runs); rushing leads to mistakes Focus on the critical path - Home screen tokens refresh is the key metric Watch for trade-offs - some optimizations might reduce one metric but increase another
返回排行榜