tribunal-kit 2.4.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/agents/accessibility-reviewer.md +220 -134
- package/.agent/agents/ai-code-reviewer.md +233 -129
- package/.agent/agents/backend-specialist.md +238 -178
- package/.agent/agents/code-archaeologist.md +181 -119
- package/.agent/agents/database-architect.md +207 -164
- package/.agent/agents/debugger.md +218 -151
- package/.agent/agents/dependency-reviewer.md +136 -55
- package/.agent/agents/devops-engineer.md +238 -175
- package/.agent/agents/documentation-writer.md +221 -137
- package/.agent/agents/explorer-agent.md +180 -142
- package/.agent/agents/frontend-reviewer.md +194 -80
- package/.agent/agents/frontend-specialist.md +237 -188
- package/.agent/agents/game-developer.md +52 -184
- package/.agent/agents/logic-reviewer.md +149 -78
- package/.agent/agents/mobile-developer.md +223 -152
- package/.agent/agents/mobile-reviewer.md +195 -79
- package/.agent/agents/orchestrator.md +211 -170
- package/.agent/agents/penetration-tester.md +174 -131
- package/.agent/agents/performance-optimizer.md +203 -139
- package/.agent/agents/performance-reviewer.md +211 -108
- package/.agent/agents/product-manager.md +162 -108
- package/.agent/agents/project-planner.md +162 -142
- package/.agent/agents/qa-automation-engineer.md +242 -138
- package/.agent/agents/security-auditor.md +194 -170
- package/.agent/agents/seo-specialist.md +213 -132
- package/.agent/agents/sql-reviewer.md +194 -73
- package/.agent/agents/supervisor-agent.md +203 -156
- package/.agent/agents/test-coverage-reviewer.md +193 -81
- package/.agent/agents/type-safety-reviewer.md +208 -65
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/skills/agent-organizer/SKILL.md +126 -132
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +160 -0
- package/.agent/skills/api-patterns/SKILL.md +289 -257
- package/.agent/skills/api-security-auditor/SKILL.md +177 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/appflow-wireframe/SKILL.md +107 -58
- package/.agent/skills/architecture/SKILL.md +331 -200
- package/.agent/skills/authentication-best-practices/SKILL.md +173 -0
- package/.agent/skills/bash-linux/SKILL.md +154 -215
- package/.agent/skills/brainstorming/SKILL.md +104 -210
- package/.agent/skills/building-native-ui/SKILL.md +174 -0
- package/.agent/skills/clean-code/SKILL.md +360 -206
- package/.agent/skills/config-validator/SKILL.md +141 -165
- package/.agent/skills/csharp-developer/SKILL.md +528 -107
- package/.agent/skills/database-design/SKILL.md +455 -275
- package/.agent/skills/deployment-procedures/SKILL.md +145 -188
- package/.agent/skills/devops-engineer/SKILL.md +332 -134
- package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
- package/.agent/skills/edge-computing/SKILL.md +157 -213
- package/.agent/skills/extract-design-system/SKILL.md +134 -0
- package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
- package/.agent/skills/game-design-expert/SKILL.md +105 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
- package/.agent/skills/github-operations/SKILL.md +314 -354
- package/.agent/skills/gsap-expert/SKILL.md +901 -0
- package/.agent/skills/i18n-localization/SKILL.md +138 -216
- package/.agent/skills/intelligent-routing/SKILL.md +127 -139
- package/.agent/skills/llm-engineering/SKILL.md +357 -258
- package/.agent/skills/local-first/SKILL.md +154 -203
- package/.agent/skills/mcp-builder/SKILL.md +118 -224
- package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
- package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
- package/.agent/skills/observability/SKILL.md +330 -285
- package/.agent/skills/parallel-agents/SKILL.md +122 -181
- package/.agent/skills/performance-profiling/SKILL.md +254 -197
- package/.agent/skills/plan-writing/SKILL.md +118 -188
- package/.agent/skills/platform-engineer/SKILL.md +123 -135
- package/.agent/skills/playwright-best-practices/SKILL.md +162 -0
- package/.agent/skills/powershell-windows/SKILL.md +146 -230
- package/.agent/skills/python-pro/SKILL.md +879 -114
- package/.agent/skills/react-specialist/SKILL.md +931 -108
- package/.agent/skills/readme-builder/SKILL.md +42 -0
- package/.agent/skills/realtime-patterns/SKILL.md +304 -296
- package/.agent/skills/rust-pro/SKILL.md +701 -240
- package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
- package/.agent/skills/server-management/SKILL.md +190 -212
- package/.agent/skills/shadcn-ui-expert/SKILL.md +206 -0
- package/.agent/skills/skill-creator/SKILL.md +68 -0
- package/.agent/skills/sql-pro/SKILL.md +633 -104
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +78 -0
- package/.agent/skills/swiftui-expert/SKILL.md +176 -0
- package/.agent/skills/systematic-debugging/SKILL.md +118 -186
- package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
- package/.agent/skills/tdd-workflow/SKILL.md +137 -209
- package/.agent/skills/testing-patterns/SKILL.md +573 -205
- package/.agent/skills/vue-expert/SKILL.md +964 -119
- package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
- package/.agent/skills/web-accessibility-auditor/SKILL.md +193 -0
- package/.agent/skills/webapp-testing/SKILL.md +145 -236
- package/.agent/workflows/api-tester.md +151 -279
- package/.agent/workflows/audit.md +138 -168
- package/.agent/workflows/brainstorm.md +110 -146
- package/.agent/workflows/changelog.md +112 -144
- package/.agent/workflows/create.md +124 -139
- package/.agent/workflows/debug.md +189 -196
- package/.agent/workflows/deploy.md +189 -153
- package/.agent/workflows/enhance.md +151 -139
- package/.agent/workflows/fix.md +135 -143
- package/.agent/workflows/generate.md +157 -164
- package/.agent/workflows/migrate.md +160 -163
- package/.agent/workflows/orchestrate.md +168 -151
- package/.agent/workflows/performance-benchmarker.md +123 -305
- package/.agent/workflows/plan.md +173 -151
- package/.agent/workflows/preview.md +80 -137
- package/.agent/workflows/refactor.md +183 -153
- package/.agent/workflows/review-ai.md +129 -140
- package/.agent/workflows/review.md +116 -155
- package/.agent/workflows/session.md +94 -154
- package/.agent/workflows/status.md +79 -125
- package/.agent/workflows/strengthen-skills.md +139 -99
- package/.agent/workflows/swarm.md +179 -194
- package/.agent/workflows/test.md +211 -166
- package/.agent/workflows/tribunal-backend.md +113 -111
- package/.agent/workflows/tribunal-database.md +115 -132
- package/.agent/workflows/tribunal-frontend.md +118 -115
- package/.agent/workflows/tribunal-full.md +133 -136
- package/.agent/workflows/tribunal-mobile.md +119 -123
- package/.agent/workflows/tribunal-performance.md +133 -152
- package/.agent/workflows/ui-ux-pro-max.md +143 -171
- package/README.md +11 -15
- package/package.json +1 -1
- package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
- package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
- package/.agent/skills/game-development/SKILL.md +0 -236
- package/.agent/skills/game-development/game-art/SKILL.md +0 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
- package/.agent/skills/game-development/game-design/SKILL.md +0 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
- package/.agent/skills/game-development/web-games/SKILL.md +0 -150
|
@@ -1,197 +1,254 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: performance-profiling
|
|
3
|
-
description: Performance profiling
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version:
|
|
6
|
-
last-updated: 2026-
|
|
7
|
-
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Performance Profiling
|
|
11
|
-
|
|
12
|
-
>
|
|
13
|
-
> The bottleneck is
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// ✅
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
###
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
##
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
1
|
+
---
|
|
2
|
+
name: performance-profiling
|
|
3
|
+
description: Performance profiling mastery. Core Web Vitals (LCP, CLS, INP), Lighthouse auditing, JavaScript profiling, React rendering optimization, bundle analysis, memory leak detection, database query profiling (EXPLAIN ANALYZE), load testing, and performance budgets. Use when optimizing performance, debugging slow pages, or establishing performance standards.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-01
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Performance Profiling — Measurement-Driven Optimization
|
|
11
|
+
|
|
12
|
+
> "Premature optimization is the root of all evil" — but premature measurement is the root of all performance.
|
|
13
|
+
> Never optimize without profiling first. The bottleneck is never where you think it is.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Core Web Vitals
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
LCP (Largest Contentful Paint) → Loading speed
|
|
21
|
+
✅ Good: ≤ 2.5s │ ⚠️ Needs work: 2.5-4s │ ❌ Poor: > 4s
|
|
22
|
+
What: Time until the largest visible element renders
|
|
23
|
+
Fix: Optimize images, preload fonts, reduce server time
|
|
24
|
+
|
|
25
|
+
INP (Interaction to Next Paint) → Responsiveness
|
|
26
|
+
✅ Good: ≤ 200ms │ ⚠️ Needs work: 200-500ms │ ❌ Poor: > 500ms
|
|
27
|
+
What: Delay between user interaction and visual response
|
|
28
|
+
Fix: Break long tasks, use web workers, defer non-critical JS
|
|
29
|
+
|
|
30
|
+
CLS (Cumulative Layout Shift) → Visual stability
|
|
31
|
+
✅ Good: ≤ 0.1 │ ⚠️ Needs work: 0.1-0.25 │ ❌ Poor: > 0.25
|
|
32
|
+
What: How much the page layout shifts unexpectedly
|
|
33
|
+
Fix: Set explicit dimensions on images/ads, font-display: swap
|
|
34
|
+
|
|
35
|
+
TTFB (Time to First Byte) → Server responsiveness
|
|
36
|
+
✅ Good: ≤ 800ms
|
|
37
|
+
Fix: CDN, caching, optimize database queries, use edge
|
|
38
|
+
|
|
39
|
+
// ❌ HALLUCINATION TRAP: FID is deprecated. Use INP (Interaction to Next Paint).
|
|
40
|
+
// FID only measured the FIRST interaction. INP measures ALL interactions.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## JavaScript Profiling
|
|
46
|
+
|
|
47
|
+
### Bundle Analysis
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Analyze what's in your JavaScript bundle
|
|
51
|
+
npx vite-bundle-visualizer # Vite
|
|
52
|
+
npx @next/bundle-analyzer # Next.js
|
|
53
|
+
|
|
54
|
+
# Key targets:
|
|
55
|
+
# Total JS < 200KB (gzipped) for initial load
|
|
56
|
+
# No single dependency > 50KB (gzipped)
|
|
57
|
+
# Tree-shaking working (no dead code)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Common bundle bloat sources:
|
|
62
|
+
// ❌ import _ from "lodash"; // 72KB — imports everything
|
|
63
|
+
// ✅ import debounce from "lodash/debounce"; // 1KB — specific import
|
|
64
|
+
|
|
65
|
+
// ❌ import { format } from "date-fns"; // may import entire library
|
|
66
|
+
// ✅ import { format } from "date-fns/format"; // specific import
|
|
67
|
+
|
|
68
|
+
// ❌ import moment from "moment"; // 67KB + locales
|
|
69
|
+
// ✅ Use native Intl.DateTimeFormat or date-fns (tree-shakeable)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### React Rendering Profiling
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// React DevTools Profiler — find unnecessary re-renders
|
|
76
|
+
|
|
77
|
+
// 1. Why Did You Render (development tool)
|
|
78
|
+
// npm i @welldone-software/why-did-you-render -D
|
|
79
|
+
|
|
80
|
+
// 2. Manual render tracking
|
|
81
|
+
const RenderCounter = ({ label }: { label: string }) => {
|
|
82
|
+
const renderCount = useRef(0);
|
|
83
|
+
renderCount.current++;
|
|
84
|
+
console.log(`[${label}] rendered ${renderCount.current} times`);
|
|
85
|
+
return null;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// 3. React.memo — prevent re-renders when props haven't changed
|
|
89
|
+
const ExpensiveList = React.memo(function ExpensiveList({ items }: Props) {
|
|
90
|
+
return items.map((item) => <ListItem key={item.id} {...item} />);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// 4. useMemo / useCallback — memoize expensive computations
|
|
94
|
+
const sortedItems = useMemo(
|
|
95
|
+
() => items.toSorted((a, b) => a.name.localeCompare(b.name)),
|
|
96
|
+
[items],
|
|
97
|
+
);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Memory Leak Detection
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// Common memory leaks in JavaScript:
|
|
104
|
+
// 1. Event listeners not cleaned up
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
const handler = () => console.log("resize");
|
|
107
|
+
window.addEventListener("resize", handler);
|
|
108
|
+
return () => window.removeEventListener("resize", handler); // ✅ cleanup
|
|
109
|
+
}, []);
|
|
110
|
+
|
|
111
|
+
// 2. Timers not cleared
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
const interval = setInterval(pollData, 5000);
|
|
114
|
+
return () => clearInterval(interval); // ✅ cleanup
|
|
115
|
+
}, []);
|
|
116
|
+
|
|
117
|
+
// 3. AbortController not used for fetch
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
const controller = new AbortController();
|
|
120
|
+
fetch("/api/data", { signal: controller.signal })
|
|
121
|
+
.then((res) => res.json())
|
|
122
|
+
.then(setData)
|
|
123
|
+
.catch((e) => { if (e.name !== "AbortError") throw e; });
|
|
124
|
+
return () => controller.abort(); // ✅ cancel on unmount
|
|
125
|
+
}, []);
|
|
126
|
+
|
|
127
|
+
// Detection: Chrome DevTools → Memory → Heap Snapshot
|
|
128
|
+
// Take snapshot, perform action, take another, compare growth
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Image Optimization
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<!-- Modern image loading -->
|
|
137
|
+
<img
|
|
138
|
+
src="hero.webp"
|
|
139
|
+
srcset="hero-480.webp 480w, hero-768.webp 768w, hero-1200.webp 1200w"
|
|
140
|
+
sizes="(max-width: 768px) 100vw, 50vw"
|
|
141
|
+
width="1200"
|
|
142
|
+
height="800"
|
|
143
|
+
loading="lazy"
|
|
144
|
+
decoding="async"
|
|
145
|
+
alt="Product hero"
|
|
146
|
+
fetchpriority="high"
|
|
147
|
+
/>
|
|
148
|
+
|
|
149
|
+
<!-- Rules:
|
|
150
|
+
- ALWAYS set width and height (prevents CLS)
|
|
151
|
+
- Use WebP/AVIF (30-50% smaller than JPEG)
|
|
152
|
+
- loading="lazy" for below-the-fold images
|
|
153
|
+
- fetchpriority="high" for LCP image
|
|
154
|
+
- Use srcset for responsive images
|
|
155
|
+
- Serve from CDN with auto-format negotiation
|
|
156
|
+
-->
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Database Query Profiling
|
|
162
|
+
|
|
163
|
+
```sql
|
|
164
|
+
-- Always EXPLAIN before optimizing
|
|
165
|
+
EXPLAIN ANALYZE SELECT u.*, COUNT(p.id) AS post_count
|
|
166
|
+
FROM users u
|
|
167
|
+
LEFT JOIN posts p ON p.author_id = u.id
|
|
168
|
+
WHERE u.is_active = true
|
|
169
|
+
GROUP BY u.id
|
|
170
|
+
ORDER BY post_count DESC
|
|
171
|
+
LIMIT 20;
|
|
172
|
+
|
|
173
|
+
-- Look for:
|
|
174
|
+
-- Seq Scan → needs an index (on large tables)
|
|
175
|
+
-- Nested Loop → consider index or different join strategy
|
|
176
|
+
-- Sort → can an index provide sorted data?
|
|
177
|
+
-- execution time > 100ms → optimize
|
|
178
|
+
|
|
179
|
+
-- Common fixes:
|
|
180
|
+
-- Add index: CREATE INDEX idx_posts_author ON posts (author_id);
|
|
181
|
+
-- Use partial index: CREATE INDEX idx_active_users ON users (id) WHERE is_active;
|
|
182
|
+
-- Avoid SELECT *: SELECT only needed columns
|
|
183
|
+
-- Paginate with cursor: WHERE id > $cursor ORDER BY id LIMIT 20
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Performance Budgets
|
|
189
|
+
|
|
190
|
+
```javascript
|
|
191
|
+
// Lighthouse CI budget
|
|
192
|
+
// lighthouserc.js
|
|
193
|
+
module.exports = {
|
|
194
|
+
ci: {
|
|
195
|
+
assert: {
|
|
196
|
+
assertions: {
|
|
197
|
+
"categories:performance": ["error", { minScore: 0.9 }],
|
|
198
|
+
"first-contentful-paint": ["error", { maxNumericValue: 1500 }],
|
|
199
|
+
"largest-contentful-paint": ["error", { maxNumericValue: 2500 }],
|
|
200
|
+
"cumulative-layout-shift": ["error", { maxNumericValue: 0.1 }],
|
|
201
|
+
"total-byte-weight": ["error", { maxNumericValue: 500000 }],
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
Performance budget targets:
|
|
210
|
+
Total JS (gzipped): < 200KB
|
|
211
|
+
Total CSS (gzipped): < 50KB
|
|
212
|
+
Total page weight: < 500KB
|
|
213
|
+
LCP: < 2.5s
|
|
214
|
+
INP: < 200ms
|
|
215
|
+
CLS: < 0.1
|
|
216
|
+
TTFB: < 800ms
|
|
217
|
+
Time to Interactive: < 3.8s
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 🤖 LLM-Specific Traps
|
|
223
|
+
|
|
224
|
+
1. **FID Instead of INP:** FID is deprecated. Use INP (Interaction to Next Paint) for responsiveness measurement.
|
|
225
|
+
2. **Optimizing Without Profiling:** Never optimize until you've measured. The bottleneck is never obvious.
|
|
226
|
+
3. **`import _ from "lodash"`:** Full lodash import is 72KB. Use specific imports: `lodash/debounce`.
|
|
227
|
+
4. **Images Without Dimensions:** Missing `width`/`height` on images causes CLS (layout shift).
|
|
228
|
+
5. **`loading="lazy"` on LCP Image:** The hero/LCP image must NOT be lazy-loaded. Use `fetchpriority="high"`.
|
|
229
|
+
6. **`SELECT *` on Large Tables:** Always select specific columns. `SELECT *` transfers unnecessary data.
|
|
230
|
+
7. **Missing Cleanup in useEffect:** Event listeners, timers, and fetches without cleanup = memory leaks.
|
|
231
|
+
8. **Average Latency as Metric:** Averages hide outliers. Always track P50, P95, P99.
|
|
232
|
+
9. **No Performance Budget:** Without enforced budgets, performance degrades with every deploy.
|
|
233
|
+
10. **Optimizing Render Before Network:** Network is usually the bottleneck, not render. Optimize TTFB first.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 🏛️ Tribunal Integration
|
|
238
|
+
|
|
239
|
+
**Slash command: `/tribunal-performance`**
|
|
240
|
+
|
|
241
|
+
### ✅ Pre-Flight Self-Audit
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
✅ Did I measure BEFORE optimizing (Lighthouse, EXPLAIN ANALYZE)?
|
|
245
|
+
✅ Is LCP < 2.5s and INP < 200ms?
|
|
246
|
+
✅ Are images using WebP/AVIF with explicit dimensions?
|
|
247
|
+
✅ Is the JS bundle < 200KB gzipped?
|
|
248
|
+
✅ Are database queries using indexes (no Seq Scan on large tables)?
|
|
249
|
+
✅ Are all useEffect hooks cleaning up subscriptions/timers?
|
|
250
|
+
✅ Am I tracking P95/P99 latency (not just averages)?
|
|
251
|
+
✅ Is there a performance budget enforced in CI?
|
|
252
|
+
✅ Is the LCP image using fetchpriority="high" (not lazy)?
|
|
253
|
+
✅ Are imports tree-shakeable (specific, not barrel imports)?
|
|
254
|
+
```
|