Restructured project from nested workspace pattern to flat single-repo layout. This eliminates redundant nesting and consolidates all project files under version control. ## Migration Summary **Before:** ``` alex/ (workspace, not versioned) ├── chess-game/ (git repo) │ ├── js/, css/, tests/ │ └── index.html └── docs/ (planning, not versioned) ``` **After:** ``` alex/ (git repo, everything versioned) ├── js/, css/, tests/ ├── index.html ├── docs/ (project documentation) ├── planning/ (historical planning docs) ├── .gitea/ (CI/CD) └── CLAUDE.md (configuration) ``` ## Changes Made ### Structure Consolidation - Moved all chess-game/ contents to root level - Removed redundant chess-game/ subdirectory - Flattened directory structure (eliminated one nesting level) ### Documentation Organization - Moved chess-game/docs/ → docs/ (project documentation) - Moved alex/docs/ → planning/ (historical planning documents) - Added CLAUDE.md (workspace configuration) - Added IMPLEMENTATION_PROMPT.md (original project prompt) ### Version Control Improvements - All project files now under version control - Planning documents preserved in planning/ folder - Merged .gitignore files (workspace + project) - Added .claude/ agent configurations ### File Updates - Updated .gitignore to include both workspace and project excludes - Moved README.md to root level - All import paths remain functional (relative paths unchanged) ## Benefits ✅ **Simpler Structure** - One level of nesting removed ✅ **Complete Versioning** - All documentation now in git ✅ **Standard Layout** - Matches open-source project conventions ✅ **Easier Navigation** - Direct access to all project files ✅ **CI/CD Compatible** - All workflows still functional ## Technical Validation - ✅ Node.js environment verified - ✅ Dependencies installed successfully - ✅ Dev server starts and responds - ✅ All core files present and accessible - ✅ Git repository functional ## Files Preserved **Implementation Files:** - js/ (3,517 lines of code) - css/ (4 stylesheets) - tests/ (87 test cases) - index.html - package.json **CI/CD Pipeline:** - .gitea/workflows/ci.yml - .gitea/workflows/release.yml **Documentation:** - docs/ (12+ documentation files) - planning/ (historical planning materials) - README.md **Configuration:** - jest.config.js, babel.config.cjs, playwright.config.js - .gitignore (merged) - CLAUDE.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
671 lines
14 KiB
Markdown
671 lines
14 KiB
Markdown
# Performance Report - Chess Game Implementation
|
||
|
||
**Report Date**: 2025-11-22
|
||
**Reviewer**: Reviewer Agent (Performance Analysis)
|
||
**Swarm ID**: swarm-chess-game
|
||
**Status**: ❌ **CANNOT ASSESS - NO IMPLEMENTATION**
|
||
|
||
---
|
||
|
||
## Executive Summary
|
||
|
||
**CRITICAL**: Performance analysis cannot be performed because no implementation exists.
|
||
|
||
**Performance Metrics Status**:
|
||
- Lighthouse Score: ❌ **N/A - No app to test**
|
||
- Bundle Size: ❌ **N/A - No build**
|
||
- Rendering Performance: ❌ **N/A - No UI**
|
||
- Move Validation Speed: ❌ **N/A - No game logic**
|
||
- Browser Compatibility: ❌ **N/A - No code**
|
||
|
||
**Overall Performance Rating**: **0/10 - CANNOT MEASURE**
|
||
|
||
---
|
||
|
||
## 1. Lighthouse Performance Analysis
|
||
|
||
### 1.1 Desktop Performance
|
||
|
||
**Target**: Lighthouse Score >90
|
||
|
||
**Metrics**:
|
||
- [ ] Performance: >90
|
||
- [ ] Accessibility: >90
|
||
- [ ] Best Practices: >90
|
||
- [ ] SEO: >90
|
||
|
||
**Actual**: ❌ **CANNOT MEASURE - No HTML page exists**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
### 1.2 Mobile Performance
|
||
|
||
**Target**: Lighthouse Score >85 (mobile)
|
||
|
||
**Metrics**:
|
||
- [ ] Performance: >85
|
||
- [ ] First Contentful Paint: <1.8s
|
||
- [ ] Largest Contentful Paint: <2.5s
|
||
- [ ] Time to Interactive: <3.8s
|
||
- [ ] Cumulative Layout Shift: <0.1
|
||
|
||
**Actual**: ❌ **CANNOT MEASURE**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
## 2. Bundle Size Analysis
|
||
|
||
### 2.1 JavaScript Bundle
|
||
|
||
**Target**: <150KB gzipped
|
||
|
||
**Expected Breakdown**:
|
||
```
|
||
Total Bundle: 120KB (gzipped)
|
||
├── Core Game Logic: 45KB
|
||
│ ├── Models: 15KB
|
||
│ ├── Controllers: 12KB
|
||
│ ├── Views: 10KB
|
||
│ └── Utils: 8KB
|
||
├── Move Validation Engine: 35KB
|
||
├── UI Components: 25KB
|
||
├── AI Engine (Optional): 40KB
|
||
└── Dependencies: 15KB
|
||
```
|
||
|
||
**Actual**: ❌ **NO BUILD - Cannot measure**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
### 2.2 Asset Size
|
||
|
||
**Target**: <50KB total
|
||
|
||
**Expected Assets**:
|
||
- Piece images (SVG): 12 pieces × 2KB = 24KB
|
||
- Sound effects: 5 files × 3KB = 15KB
|
||
- CSS: ~10KB
|
||
- Total: ~49KB
|
||
|
||
**Actual**: ❌ **NO ASSETS - Cannot measure**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
## 3. Runtime Performance
|
||
|
||
### 3.1 Move Validation Speed
|
||
|
||
**Target**: <100ms per move validation
|
||
|
||
**Test Scenarios**:
|
||
- Simple pawn move: <10ms
|
||
- Knight move: <15ms
|
||
- Complex queen move: <30ms
|
||
- Check detection: <50ms
|
||
- Checkmate detection: <100ms
|
||
- Position evaluation (AI): <200ms
|
||
|
||
**Actual**: ❌ **NO IMPLEMENTATION - Cannot measure**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
### 3.2 Rendering Performance
|
||
|
||
**Target**: 60 FPS (16.67ms per frame)
|
||
|
||
**Test Scenarios**:
|
||
- Board initial render: <50ms
|
||
- Piece movement animation: 60 FPS
|
||
- Highlight updates: <16ms
|
||
- Move history scroll: 60 FPS
|
||
- Simultaneous animations: 60 FPS
|
||
|
||
**Actual**: ❌ **NO UI - Cannot measure**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
### 3.3 Memory Usage
|
||
|
||
**Target**: <100MB RAM usage
|
||
|
||
**Expected Memory Profile**:
|
||
- Game state: ~2MB
|
||
- Board representation: ~1MB
|
||
- Move history (100 moves): ~5MB
|
||
- UI elements: ~10MB
|
||
- Total baseline: ~20MB
|
||
|
||
**Actual**: ❌ **NO APP - Cannot measure**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
## 4. Browser Compatibility Matrix
|
||
|
||
### 4.1 Desktop Browsers
|
||
|
||
**Target**: 100% compatibility on modern browsers
|
||
|
||
| Browser | Version | Status | Performance | Notes |
|
||
|---------|---------|--------|-------------|-------|
|
||
| Chrome | Latest | ❌ N/A | ❌ N/A | Not tested |
|
||
| Firefox | Latest | ❌ N/A | ❌ N/A | Not tested |
|
||
| Safari | Latest | ❌ N/A | ❌ N/A | Not tested |
|
||
| Edge | Latest | ❌ N/A | ❌ N/A | Not tested |
|
||
| Opera | Latest | ❌ N/A | ❌ N/A | Not tested |
|
||
|
||
**Status**: ❌ **NO TESTS RUN**
|
||
|
||
---
|
||
|
||
### 4.2 Mobile Browsers
|
||
|
||
**Target**: 100% compatibility on iOS Safari and Chrome Android
|
||
|
||
| Browser | Platform | Status | Performance | Notes |
|
||
|---------|----------|--------|-------------|-------|
|
||
| Safari | iOS 15+ | ❌ N/A | ❌ N/A | Not tested |
|
||
| Chrome | Android 10+ | ❌ N/A | ❌ N/A | Not tested |
|
||
| Firefox | Android | ❌ N/A | ❌ N/A | Not tested |
|
||
| Samsung Browser | Android | ❌ N/A | ❌ N/A | Not tested |
|
||
|
||
**Status**: ❌ **NO TESTS RUN**
|
||
|
||
---
|
||
|
||
### 4.3 Feature Support
|
||
|
||
**Target**: All ES6+ features supported with polyfills if needed
|
||
|
||
| Feature | Chrome | Firefox | Safari | Edge | Polyfill Needed |
|
||
|---------|--------|---------|--------|------|-----------------|
|
||
| ES6 Classes | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| Arrow Functions | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| Destructuring | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| Template Literals | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| Promises | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| LocalStorage | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
| Drag & Drop API | ❌ N/A | ❌ N/A | ❌ N/A | ❌ N/A | N/A |
|
||
|
||
**Status**: ❌ **CANNOT TEST**
|
||
|
||
---
|
||
|
||
## 5. Responsive Design Performance
|
||
|
||
### 5.1 Viewport Testing
|
||
|
||
**Target**: Smooth performance at all viewport sizes
|
||
|
||
| Viewport | Size | Performance | Layout | Notes |
|
||
|----------|------|-------------|--------|-------|
|
||
| Mobile Portrait | 320×568 | ❌ N/A | ❌ N/A | Not tested |
|
||
| Mobile Landscape | 568×320 | ❌ N/A | ❌ N/A | Not tested |
|
||
| Tablet Portrait | 768×1024 | ❌ N/A | ❌ N/A | Not tested |
|
||
| Tablet Landscape | 1024×768 | ❌ N/A | ❌ N/A | Not tested |
|
||
| Desktop Small | 1280×720 | ❌ N/A | ❌ N/A | Not tested |
|
||
| Desktop Large | 1920×1080 | ❌ N/A | ❌ N/A | Not tested |
|
||
| 4K | 2560×1440 | ❌ N/A | ❌ N/A | Not tested |
|
||
|
||
**Status**: ❌ **NO UI TO TEST**
|
||
|
||
---
|
||
|
||
## 6. Network Performance
|
||
|
||
### 6.1 Load Time Analysis
|
||
|
||
**Target**: <2s on 3G, <1s on 4G
|
||
|
||
**Metrics**:
|
||
- [ ] Initial HTML: <100ms
|
||
- [ ] CSS load: <200ms
|
||
- [ ] JS load: <500ms
|
||
- [ ] Assets load: <300ms
|
||
- [ ] Total time to interactive: <1s (4G), <2s (3G)
|
||
|
||
**Actual**: ❌ **NO APP TO TEST**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
### 6.2 Caching Strategy
|
||
|
||
**Expected**:
|
||
- [ ] Service Worker implemented
|
||
- [ ] Static assets cached
|
||
- [ ] App Shell cached
|
||
- [ ] Offline fallback available
|
||
|
||
**Actual**: ❌ **NOT IMPLEMENTED**
|
||
|
||
**Status**: ❌ **BLOCKED**
|
||
|
||
---
|
||
|
||
## 7. Optimization Opportunities (For Future Implementation)
|
||
|
||
### 7.1 Code Optimizations
|
||
|
||
**Recommended Optimizations**:
|
||
|
||
**1. Bitboards for Position Checking**
|
||
```javascript
|
||
// Instead of array iteration
|
||
// Use bitboards for O(1) position checks
|
||
class BitboardOptimizer {
|
||
// Fast position checking
|
||
// ~10x faster than array iteration
|
||
}
|
||
```
|
||
|
||
**2. Move Caching**
|
||
```javascript
|
||
// Cache valid moves for current position
|
||
// Invalidate on position change
|
||
class MoveCache {
|
||
// Reduce redundant calculations
|
||
// ~5x speedup for AI
|
||
}
|
||
```
|
||
|
||
**3. Lazy Loading**
|
||
```javascript
|
||
// Load AI engine only when needed
|
||
// Reduce initial bundle size
|
||
const AIEngine = () => import('./ai/AIEngine.js');
|
||
```
|
||
|
||
**4. Virtual Scrolling for History**
|
||
```javascript
|
||
// Only render visible moves
|
||
// Handle 1000+ moves smoothly
|
||
class VirtualMoveHistory {
|
||
// Constant memory usage
|
||
}
|
||
```
|
||
|
||
**Status**: ⚠️ **RECOMMENDATIONS ONLY - No implementation to optimize**
|
||
|
||
---
|
||
|
||
### 7.2 Rendering Optimizations
|
||
|
||
**Recommended**:
|
||
|
||
**1. RequestAnimationFrame for Animations**
|
||
```javascript
|
||
// Smooth 60 FPS animations
|
||
function animatePieceMove(piece, from, to) {
|
||
requestAnimationFrame(updatePosition);
|
||
}
|
||
```
|
||
|
||
**2. CSS Transforms for Movement**
|
||
```css
|
||
/* Hardware-accelerated animations */
|
||
.piece {
|
||
transform: translate3d(x, y, 0);
|
||
will-change: transform;
|
||
}
|
||
```
|
||
|
||
**3. Debounced Window Resize**
|
||
```javascript
|
||
// Prevent excessive reflows
|
||
const handleResize = debounce(() => {
|
||
resizeBoard();
|
||
}, 100);
|
||
```
|
||
|
||
**Status**: ⚠️ **RECOMMENDATIONS ONLY**
|
||
|
||
---
|
||
|
||
### 7.3 Memory Optimizations
|
||
|
||
**Recommended**:
|
||
|
||
**1. Object Pooling for Positions**
|
||
```javascript
|
||
// Reuse position objects
|
||
// Reduce GC pressure
|
||
class PositionPool {
|
||
// ~50% memory reduction
|
||
}
|
||
```
|
||
|
||
**2. Efficient Move History**
|
||
```javascript
|
||
// Store deltas instead of full positions
|
||
class CompressedHistory {
|
||
// ~80% memory reduction
|
||
}
|
||
```
|
||
|
||
**Status**: ⚠️ **RECOMMENDATIONS ONLY**
|
||
|
||
---
|
||
|
||
## 8. Performance Benchmarks (Cannot Run)
|
||
|
||
### 8.1 Expected Benchmarks
|
||
|
||
**Core Operations** (Expected performance):
|
||
- Board initialization: <10ms
|
||
- Piece creation: <1ms per piece
|
||
- Move validation: <50ms
|
||
- Legal moves generation: <30ms
|
||
- Check detection: <20ms
|
||
- Checkmate detection: <100ms
|
||
- Position evaluation: <200ms
|
||
|
||
**UI Operations** (Expected performance):
|
||
- Initial render: <50ms
|
||
- Piece selection: <5ms
|
||
- Move highlight: <10ms
|
||
- Animation frame: <16ms (60 FPS)
|
||
- History update: <20ms
|
||
|
||
**Actual Benchmarks**: ❌ **CANNOT RUN - No implementation**
|
||
|
||
---
|
||
|
||
### 8.2 AI Performance (If Implemented)
|
||
|
||
**Expected AI Performance**:
|
||
- Depth 1 search: <50ms
|
||
- Depth 2 search: <200ms
|
||
- Depth 3 search: <1000ms
|
||
- Depth 4 search: <5000ms
|
||
- Depth 5 search: <30000ms
|
||
|
||
**Optimizations**:
|
||
- Alpha-beta pruning: ~10x speedup
|
||
- Move ordering: ~2x speedup
|
||
- Transposition table: ~3x speedup
|
||
- Web Worker: No UI blocking
|
||
|
||
**Actual Performance**: ❌ **NO AI IMPLEMENTED**
|
||
|
||
---
|
||
|
||
## 9. Critical Performance Issues (None Found - No Code)
|
||
|
||
### No Issues Detected
|
||
|
||
**Reason**: No implementation exists to analyze for performance issues.
|
||
|
||
**Potential Issues to Watch For** (during implementation):
|
||
|
||
**1. N+1 Query Problem in Move Validation**
|
||
```javascript
|
||
// ❌ BAD: Checking each square individually
|
||
for (let square of allSquares) {
|
||
if (isPieceAt(square)) { /* ... */ }
|
||
}
|
||
|
||
// ✅ GOOD: Single position lookup
|
||
const positions = getPiecePositions(); // O(1) lookup
|
||
```
|
||
|
||
**2. Unnecessary Re-renders**
|
||
```javascript
|
||
// ❌ BAD: Re-rendering entire board on every move
|
||
function updateBoard() {
|
||
renderEntireBoard(); // Slow
|
||
}
|
||
|
||
// ✅ GOOD: Update only changed squares
|
||
function updateBoard(move) {
|
||
updateSquare(move.from);
|
||
updateSquare(move.to);
|
||
}
|
||
```
|
||
|
||
**3. Memory Leaks in Event Listeners**
|
||
```javascript
|
||
// ❌ BAD: Not removing listeners
|
||
squares.forEach(sq => {
|
||
sq.addEventListener('click', handler);
|
||
});
|
||
|
||
// ✅ GOOD: Clean up on destroy
|
||
class BoardView {
|
||
destroy() {
|
||
this.squares.forEach(sq => {
|
||
sq.removeEventListener('click', this.handler);
|
||
});
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 10. Performance Testing Plan
|
||
|
||
### 10.1 Automated Performance Tests
|
||
|
||
**To Implement**:
|
||
|
||
```javascript
|
||
// Lighthouse CI Configuration
|
||
module.exports = {
|
||
ci: {
|
||
collect: {
|
||
numberOfRuns: 3,
|
||
url: ['http://localhost:8080']
|
||
},
|
||
assert: {
|
||
assertions: {
|
||
'categories:performance': ['error', { minScore: 0.9 }],
|
||
'categories:accessibility': ['error', { minScore: 0.9 }],
|
||
'categories:best-practices': ['error', { minScore: 0.9 }]
|
||
}
|
||
}
|
||
}
|
||
};
|
||
```
|
||
|
||
**Status**: ❌ **NOT CONFIGURED**
|
||
|
||
---
|
||
|
||
### 10.2 Manual Performance Tests
|
||
|
||
**Test Scenarios**:
|
||
1. Load time on 3G connection
|
||
2. 60 FPS animation smoothness
|
||
3. Memory usage during 100-move game
|
||
4. AI response time at different difficulty levels
|
||
5. Rapid piece movements (stress test)
|
||
6. Multiple tabs open (memory leak test)
|
||
|
||
**Status**: ❌ **CANNOT TEST - No app**
|
||
|
||
---
|
||
|
||
## 11. Performance Recommendations for Implementation
|
||
|
||
### Phase 1: MVP (Focus on Correctness)
|
||
- ✅ Implement clean, readable code
|
||
- ✅ Don't optimize prematurely
|
||
- ✅ Get features working first
|
||
- ⚠️ Measure baseline performance
|
||
|
||
### Phase 2: Optimization (After MVP Works)
|
||
- ✅ Profile with Chrome DevTools
|
||
- ✅ Identify bottlenecks
|
||
- ✅ Optimize hot paths
|
||
- ✅ Implement caching where beneficial
|
||
|
||
### Phase 3: Polish (Final optimizations)
|
||
- ✅ Code splitting
|
||
- ✅ Lazy loading
|
||
- ✅ Bundle optimization
|
||
- ✅ Service Worker caching
|
||
|
||
---
|
||
|
||
## 12. Performance Monitoring Setup
|
||
|
||
### 12.1 Recommended Tools
|
||
|
||
**Development**:
|
||
- Chrome DevTools Performance Panel
|
||
- React DevTools Profiler (if using React)
|
||
- Lighthouse
|
||
- WebPageTest
|
||
|
||
**Production**:
|
||
- Google Analytics Performance
|
||
- Real User Monitoring (RUM)
|
||
- Error tracking (Sentry)
|
||
|
||
**Status**: ❌ **NOT CONFIGURED**
|
||
|
||
---
|
||
|
||
### 12.2 Performance Metrics Dashboard
|
||
|
||
**Key Metrics to Track**:
|
||
- Page load time (p50, p95, p99)
|
||
- Time to interactive
|
||
- Bundle size over time
|
||
- Core Web Vitals (LCP, FID, CLS)
|
||
- API response times
|
||
- Error rates
|
||
|
||
**Status**: ❌ **NOT IMPLEMENTED**
|
||
|
||
---
|
||
|
||
## 13. Verdict
|
||
|
||
### Performance Rating: **0/10 - CANNOT ASSESS**
|
||
|
||
**Reason**: No implementation exists to analyze.
|
||
|
||
**Status**: ❌ **BLOCKED - IMPLEMENTATION REQUIRED**
|
||
|
||
**Recommendation**:
|
||
1. Complete implementation first
|
||
2. Run Lighthouse audits
|
||
3. Measure bundle size
|
||
4. Test browser compatibility
|
||
5. Benchmark core operations
|
||
6. Optimize based on real data
|
||
|
||
---
|
||
|
||
## 14. Performance Checklist (For Future Implementation)
|
||
|
||
### Build Performance
|
||
- [ ] Bundle size <150KB gzipped
|
||
- [ ] Code splitting implemented
|
||
- [ ] Tree shaking enabled
|
||
- [ ] Minification enabled
|
||
- [ ] Compression (gzip/brotli) configured
|
||
|
||
### Runtime Performance
|
||
- [ ] Move validation <100ms
|
||
- [ ] 60 FPS rendering maintained
|
||
- [ ] No memory leaks
|
||
- [ ] Efficient event handling
|
||
- [ ] Lazy loading for AI
|
||
|
||
### Network Performance
|
||
- [ ] Load time <2s (3G)
|
||
- [ ] Service Worker caching
|
||
- [ ] Asset optimization
|
||
- [ ] CDN for static assets
|
||
|
||
### Browser Compatibility
|
||
- [ ] Chrome (latest) - 100% functional
|
||
- [ ] Firefox (latest) - 100% functional
|
||
- [ ] Safari (latest) - 100% functional
|
||
- [ ] Edge (latest) - 100% functional
|
||
- [ ] Mobile browsers tested
|
||
|
||
### Accessibility Performance
|
||
- [ ] Keyboard navigation smooth
|
||
- [ ] Screen reader performant
|
||
- [ ] High contrast mode supported
|
||
- [ ] Reduced motion respected
|
||
|
||
**Current Status**: 0/25 items completed (0%)
|
||
|
||
---
|
||
|
||
## 15. Sign-Off
|
||
|
||
**Performance Analyst**: Reviewer Agent
|
||
**Analysis Type**: Performance & Compatibility Review
|
||
**Status**: ❌ **CANNOT COMPLETE - NO IMPLEMENTATION**
|
||
**Date**: 2025-11-22
|
||
|
||
**Critical Finding**: Performance analysis cannot be performed without an implementation. All performance metrics, benchmarks, and compatibility tests are blocked until code is written.
|
||
|
||
**Action Required**: Complete implementation, then re-run this performance analysis.
|
||
|
||
---
|
||
|
||
**FINAL VERDICT**: ❌ **IMPLEMENTATION REQUIRED - PERFORMANCE ANALYSIS BLOCKED**
|
||
|
||
---
|
||
|
||
## Appendix A: Performance Budget
|
||
|
||
### Recommended Performance Budget
|
||
|
||
**For implementation team to follow:**
|
||
|
||
```json
|
||
{
|
||
"budget": {
|
||
"javascript": {
|
||
"total": 150,
|
||
"vendor": 50,
|
||
"app": 100
|
||
},
|
||
"css": {
|
||
"total": 30
|
||
},
|
||
"images": {
|
||
"total": 50
|
||
},
|
||
"fonts": {
|
||
"total": 20
|
||
}
|
||
},
|
||
"metrics": {
|
||
"loadTime": {
|
||
"3g": 2000,
|
||
"4g": 1000
|
||
},
|
||
"fps": 60,
|
||
"lighthouse": {
|
||
"performance": 90,
|
||
"accessibility": 90,
|
||
"bestPractices": 90
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
All values in KB (except loadTime in ms, fps, and lighthouse scores).
|