Files
michaelschiemer/backups/docs-backup-20250731125004/framework/performance
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00
..

Framework Performance

Performance optimization features and monitoring built into the PHP framework.

🔧 Built-in Performance Features

Connection Pooling

The framework includes advanced database connection pooling with health monitoring:

// Automatic connection pooling
$pool = new ConnectionPool([
    'min_connections' => 5,
    'max_connections' => 20,
    'idle_timeout' => 300,
    'health_check_interval' => 60
]);

// Health monitoring
$healthChecker = new ConnectionHealthChecker($pool);
$healthStatus = $healthChecker->checkHealth();

Query Optimization

N+1 Query Prevention

The framework automatically detects and eliminates N+1 queries:

// Automatic eager loading detection
$users = $userRepository->findWithRelations(['posts', 'comments']);

// Batch loading for performance
$posts = $postRepository->loadBatch($userIds);

Query Caching

Built-in query result caching with intelligent invalidation:

// Cache configuration
$cacheConfig = [
    'default_ttl' => 3600,
    'strategy' => 'write-through',
    'invalidation' => 'tag-based'
];

// Automatic query caching
$result = $repository->findCached('user-posts-' . $userId);

View System Performance

Template Compilation

PHP templates are compiled and cached for optimal performance:

// Template compilation
$viewProcessor = new ViewProcessor([
    'cache_path' => '/var/cache/views',
    'auto_reload' => false, // Production setting
    'optimize' => true
]);

Fragment Caching

Cache expensive template fragments:

<!-- Fragment caching in templates -->
<cache key="user-stats-<?= $userId ?>" ttl="3600">
    <?php foreach($stats as $stat): ?>
        <div class="stat"><?= $stat->render() ?></div>
    <?php endforeach; ?>
</cache>

📊 Performance Monitoring

Analytics Integration

The framework includes comprehensive performance analytics:

// Performance monitoring
class PerformanceMiddleware implements HttpMiddleware 
{
    public function handle(Request $request, Next $next): Response 
    {
        $startTime = microtime(true);
        $startMemory = memory_get_usage();
        
        $response = $next($request);
        
        $this->recordMetrics([
            'duration' => microtime(true) - $startTime,
            'memory' => memory_get_usage() - $startMemory,
            'route' => $request->getRoute(),
            'status' => $response->getStatusCode()
        ]);
        
        return $response;
    }
}

Database Performance Tracking

Monitor database query performance automatically:

// Query performance logging
class QueryLogger implements QueryMiddleware
{
    public function beforeQuery(string $sql, array $params): void
    {
        $this->startTime = microtime(true);
    }
    
    public function afterQuery(string $sql, array $params): void
    {
        $duration = microtime(true) - $this->startTime;
        
        if ($duration > 0.1) { // Log slow queries
            $this->logger->warning('Slow query detected', [
                'sql' => $sql,
                'duration' => $duration,
                'params' => $params
            ]);
        }
    }
}

🚀 Optimization Strategies

HTTP Layer Optimizations

Response Compression

Automatic response compression based on content type:

// Compression middleware
class CompressionMiddleware implements HttpMiddleware
{
    public function handle(Request $request, Next $next): Response
    {
        $response = $next($request);
        
        if ($this->shouldCompress($response)) {
            return $this->compress($response);
        }
        
        return $response;
    }
}

HTTP Caching

Intelligent HTTP caching with ETag support:

// Cache headers
$response->headers->set('Cache-Control', 'public, max-age=3600');
$response->headers->set('ETag', hash('sha256', $content));

// Conditional requests
if ($request->headers->get('If-None-Match') === $etag) {
    return new Response('', 304);
}

Asset Optimization

Static File Serving

Optimized static file serving with proper headers:

# Nginx configuration for static assets
location /assets/ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    add_header Vary "Accept-Encoding";
    
    gzip_static on;
    brotli_static on;
}

Asset Bundling

Framework integration with Vite for optimal asset bundling:

// Asset helper
class AssetHelper
{
    public function getAssetUrl(string $asset): string
    {
        $manifest = $this->loadManifest();
        return $manifest[$asset]['url'] ?? $asset;
    }
    
    public function getCriticalCss(): string
    {
        return $this->inlineAsset('critical.css');
    }
}

🔍 Performance Profiling

Built-in Profiler

Enable the framework profiler for detailed performance analysis:

// Profiler configuration
$profiler = new FrameworkProfiler([
    'enabled' => $this->isDebugMode(),
    'storage' => 'file', // or 'redis'
    'threshold' => 100, // ms
    'collect' => [
        'queries',
        'views',
        'cache',
        'events'
    ]
]);

Memory Usage Tracking

Monitor memory usage throughout the request lifecycle:

// Memory tracking
class MemoryTracker
{
    public function trackOperation(string $operation, callable $callback)
    {
        $beforeMemory = memory_get_usage(true);
        $beforePeak = memory_get_peak_usage(true);
        
        $result = $callback();
        
        $afterMemory = memory_get_usage(true);
        $afterPeak = memory_get_peak_usage(true);
        
        $this->recordMemoryUsage([
            'operation' => $operation,
            'memory_used' => $afterMemory - $beforeMemory,
            'peak_increase' => $afterPeak - $beforePeak
        ]);
        
        return $result;
    }
}

Performance Best Practices

Database Best Practices

  1. Use Indexes: Ensure proper database indexing
  2. Lazy Loading: Load data only when needed
  3. Batch Operations: Group database operations
  4. Connection Reuse: Leverage connection pooling
// Efficient database operations
class UserService
{
    public function getUsersWithPosts(array $userIds): array
    {
        // Single query with join instead of N+1
        return $this->repository->findUsersWithPosts($userIds);
    }
    
    public function batchUpdateUsers(array $updates): void
    {
        // Batch update instead of individual queries
        $this->repository->batchUpdate($updates);
    }
}

View Optimization

  1. Template Caching: Cache compiled templates
  2. Fragment Caching: Cache expensive view fragments
  3. Lazy Loading: Load view components on demand
  4. Asset Optimization: Minify and compress assets
// Optimized view rendering
class OptimizedViewController
{
    public function render(string $template, array $data): Response
    {
        // Use cached template if available
        $compiled = $this->templateCache->get($template);
        
        if (!$compiled) {  
            $compiled = $this->compiler->compile($template);
            $this->templateCache->set($template, $compiled);
        }
        
        return $this->renderCompiled($compiled, $data);
    }
}

📈 Monitoring & Alerts

Performance Metrics Collection

Collect and analyze key performance metrics:

// Metrics collection
$metrics = [
    'response_time' => $responseTime,
    'memory_usage' => memory_get_peak_usage(true),
    'database_queries' => $queryCount,
    'cache_hits' => $cacheHits,
    'cache_misses' => $cacheMisses
];

$this->metricsCollector->record($metrics);

Alert Configuration

Set up alerts for performance degradation:

// Performance alerts
$alertConfig = [
    'response_time_threshold' => 1000, // ms
    'memory_threshold' => 128 * 1024 * 1024, // 128MB
    'query_count_threshold' => 50,
    'error_rate_threshold' => 0.01 // 1%
];

For general performance guidelines, see Performance Guidelines
For analytics configuration, see Analytics System