- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
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
- Use Indexes: Ensure proper database indexing
- Lazy Loading: Load data only when needed
- Batch Operations: Group database operations
- 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
- Template Caching: Cache compiled templates
- Fragment Caching: Cache expensive view fragments
- Lazy Loading: Load view components on demand
- 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