Deploy to Production / Build & Verify (push) Failing after 5m56s
Ping Search Engines / Notify Search Engines (push) Successful in 2s
Deploy to Production / Pre-Deploy Tests (push) Has been skipped
Deploy to Production / Deploy to Railway (push) Has been skipped
Deploy to Production / Deploy to Render (push) Has been skipped
Deploy to Production / Deploy to VPS (PM2) (push) Has been skipped
Deploy to Production / Deploy to Fly.io (push) Has been skipped
Deploy to Production / Post-Deploy Verification (push) Has been skipped
Deploy to Production / Notify on Failure (push) Successful in 2s
E2E Test Suite / Critical User Journeys (push) Has been skipped
E2E Test Suite / API Integration Tests (push) Has been skipped
E2E Test Suite / Smoke Tests (P0) (push) Failing after 11m26s
E2E Test Suite / Form Interaction Tests (push) Failing after 11m42s
E2E Test Suite / Destructive & Chaos Tests (push) Failing after 12m2s
E2E Test Suite / Cross-Browser Regression (chromium) (push) Failing after 16m14s
E2E Test Suite / Cross-Browser Regression (webkit) (push) Failing after 17m45s
E2E Test Suite / Cross-Browser Regression (firefox) (push) Failing after 25m23s
E2E Test Suite / Security Header Tests (push) Failing after 7m55s
E2E Test Suite / Test Report Summary (push) Failing after 20s
E2E Test Suite / Mobile Device Tests (push) Failing after 2h49m9s
Uptime Monitor / Health & Response Time (push) Failing after 2s
Uptime Monitor / SSL Certificate (push) Successful in 2s
Uptime Monitor / Send Alerts (push) Failing after 3s
Uptime Monitor / Record Uptime Success (push) Has been skipped
271 lines
5.5 KiB
Markdown
271 lines
5.5 KiB
Markdown
# Performance Testing Scripts
|
|
|
|
Quick reference for performance testing and monitoring.
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### Test Current Server Performance
|
|
```bash
|
|
# Quick check (recommended)
|
|
curl -w "Time: %{time_total}s\n" -o /dev/null -s http://localhost:10000/
|
|
|
|
# Comprehensive test
|
|
python scripts/performance_test.py
|
|
|
|
# Shell script (Unix/Mac)
|
|
bash scripts/quick-perf-check.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Available Scripts
|
|
|
|
### 1. `performance_test.py`
|
|
**Purpose:** Comprehensive Python-based performance testing
|
|
|
|
**Usage:**
|
|
```bash
|
|
python scripts/performance_test.py
|
|
```
|
|
|
|
**Features:**
|
|
- Tests multiple endpoints (pages + APIs)
|
|
- Statistical analysis (mean, median, std dev)
|
|
- Domain verification
|
|
- Performance recommendations
|
|
- JSON output support
|
|
|
|
**Output:**
|
|
- Response time statistics per endpoint
|
|
- Overall performance summary
|
|
- Recommendations for slow endpoints
|
|
- Pass/fail status
|
|
|
|
---
|
|
|
|
### 2. `quick-perf-check.sh`
|
|
**Purpose:** Fast performance spot-check
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Default (localhost:10000)
|
|
bash scripts/quick-perf-check.sh
|
|
|
|
# Custom URL
|
|
bash scripts/quick-perf-check.sh https://workroot.in
|
|
```
|
|
|
|
**Features:**
|
|
- Quick response time checks
|
|
- Color-coded status indicators
|
|
- Minimal dependencies (just curl)
|
|
- Production-ready
|
|
|
|
---
|
|
|
|
### 3. `lighthouse_audit.py`
|
|
**Purpose:** Lighthouse performance audit
|
|
|
|
**Usage:**
|
|
```bash
|
|
python scripts/lighthouse_audit.py <url>
|
|
|
|
# Example
|
|
python scripts/lighthouse_audit.py http://localhost:10000
|
|
```
|
|
|
|
**Features:**
|
|
- Full Lighthouse audit
|
|
- Performance, accessibility, SEO scores
|
|
- Best practices analysis
|
|
- Detailed issue reporting
|
|
|
|
**Note:** May have encoding issues on Windows. Use WSL or fix Unicode output.
|
|
|
|
---
|
|
|
|
## Performance Targets
|
|
|
|
| Metric | Excellent | Good | Needs Work |
|
|
|--------|-----------|------|------------|
|
|
| **SSR Page Load** | < 200ms | < 500ms | > 500ms |
|
|
| **API Response** | < 100ms | < 200ms | > 200ms |
|
|
| **TTFB** | < 200ms | < 300ms | > 300ms |
|
|
|
|
---
|
|
|
|
## Core Web Vitals (Production)
|
|
|
|
| Metric | Good | Needs Improvement | Poor |
|
|
|--------|------|-------------------|------|
|
|
| **LCP** | < 2.5s | 2.5s - 4.0s | > 4.0s |
|
|
| **INP** | < 200ms | 200ms - 500ms | > 500ms |
|
|
| **CLS** | < 0.1 | 0.1 - 0.25 | > 0.25 |
|
|
|
|
---
|
|
|
|
## Manual Testing with curl
|
|
|
|
### Basic Response Time
|
|
```bash
|
|
curl -w "\nTime: %{time_total}s\n" -o /dev/null -s http://localhost:10000/
|
|
```
|
|
|
|
### Detailed Timing
|
|
```bash
|
|
curl -w "\n
|
|
Total Time: %{time_total}s
|
|
DNS Lookup: %{time_namelookup}s
|
|
TCP Connect: %{time_connect}s
|
|
TLS Handshake: %{time_appconnect}s
|
|
Time to First Byte: %{time_starttransfer}s
|
|
HTTP Code: %{http_code}
|
|
\n" -o /dev/null -s http://localhost:10000/
|
|
```
|
|
|
|
### Test Multiple Endpoints
|
|
```bash
|
|
for endpoint in / /contact /about /api/health.json; do
|
|
echo "Testing $endpoint"
|
|
curl -w "Time: %{time_total}s\n" -o /dev/null -s http://localhost:10000$endpoint
|
|
echo ""
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## CI/CD Integration
|
|
|
|
### GitHub Actions Example
|
|
```yaml
|
|
- name: Performance Test
|
|
run: |
|
|
npm run build
|
|
npm run preview &
|
|
sleep 5
|
|
python scripts/performance_test.py
|
|
```
|
|
|
|
### Pre-deployment Check
|
|
```bash
|
|
# Build and test
|
|
npm run build
|
|
npm run preview &
|
|
sleep 5
|
|
python scripts/performance_test.py
|
|
|
|
# If all tests pass, deploy
|
|
if [ $? -eq 0 ]; then
|
|
echo "Performance tests passed"
|
|
# Deploy command here
|
|
else
|
|
echo "Performance tests failed"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Slow Response Times (> 500ms)
|
|
|
|
**Possible Causes:**
|
|
1. Development server (not optimized)
|
|
2. Cold start (first request)
|
|
3. Large bundle size
|
|
4. Unoptimized images
|
|
5. Missing caching
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# 1. Build for production
|
|
npm run build
|
|
|
|
# 2. Analyze bundle
|
|
npm run build -- --analyze
|
|
|
|
# 3. Check bundle size
|
|
du -sh dist/
|
|
|
|
# 4. Test production build
|
|
npm run preview
|
|
```
|
|
|
|
### High Variance in Response Times
|
|
|
|
**Possible Causes:**
|
|
1. Network issues
|
|
2. System load
|
|
3. Garbage collection
|
|
4. Cache inconsistency
|
|
|
|
**Solutions:**
|
|
- Run multiple iterations (10+)
|
|
- Test during low system load
|
|
- Close other applications
|
|
- Clear caches between tests
|
|
|
|
---
|
|
|
|
## Monitoring in Production
|
|
|
|
### Recommended Tools
|
|
- **DataDog RUM:** Real User Monitoring
|
|
- **New Relic:** Application Performance Monitoring
|
|
- **Google Analytics:** Core Web Vitals
|
|
- **Sentry:** Performance tracking + errors
|
|
|
|
### Custom Performance Monitoring
|
|
```javascript
|
|
// Add to your app
|
|
if (typeof window !== 'undefined') {
|
|
window.addEventListener('load', () => {
|
|
const perfData = performance.getEntriesByType('navigation')[0];
|
|
console.log('Page Load Time:', perfData.loadEventEnd - perfData.fetchStart, 'ms');
|
|
console.log('DOM Interactive:', perfData.domInteractive - perfData.fetchStart, 'ms');
|
|
console.log('TTFB:', perfData.responseStart - perfData.requestStart, 'ms');
|
|
});
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Test Regularly:** Run performance tests before each deployment
|
|
2. **Set Baselines:** Document baseline performance metrics
|
|
3. **Monitor Trends:** Track performance over time
|
|
4. **Test Production:** Dev server performance != production performance
|
|
5. **Real Users:** Use RUM to understand actual user experience
|
|
6. **Set Budgets:** Define performance budgets and enforce them
|
|
|
|
---
|
|
|
|
## Resources
|
|
|
|
- [Web.dev Performance](https://web.dev/performance/)
|
|
- [Lighthouse Scoring](https://web.dev/performance-scoring/)
|
|
- [Core Web Vitals](https://web.dev/vitals/)
|
|
- [Astro Performance](https://docs.astro.build/en/guides/performance/)
|
|
|
|
---
|
|
|
|
## Quick Reference
|
|
|
|
```bash
|
|
# Test homepage
|
|
curl -w "%{time_total}s\n" -o /dev/null -s http://localhost:10000/
|
|
|
|
# Comprehensive test
|
|
python scripts/performance_test.py
|
|
|
|
# Lighthouse audit
|
|
npx lighthouse http://localhost:10000 --view
|
|
|
|
# Bundle analysis
|
|
npm run build -- --analyze
|
|
```
|