Laravel Performance Optimization Tips

LaravelPHPPerformanceOptimization

Introduction

Laravel is powerful but can be slow if not optimized. Here are proven techniques to boost performance.

1. Eager Loading (Fix N+1 Queries)

Bad: N+1 Problem

$users = User::all();

foreach ($users as $user) {
    echo $user->posts->count(); // N queries!
}

Good: Eager Loading

$users = User::with('posts')->get();

foreach ($users as $user) {
    echo $user->posts->count(); // 1 query!
}

2. Query Optimization

Select Only Needed Columns

// Bad
$users = User::all();

// Good
$users = User::select('id', 'name', 'email')->get();

Use Chunk for Large Datasets

User::chunk(1000, function ($users) {
    foreach ($users as $user) {
        // Process user
    }
});

3. Caching

Query Result Caching

$users = Cache::remember('active_users', 3600, function () {
    return User::where('status', 'active')->get();
});

View Caching

php artisan view:cache

Route Caching

php artisan route:cache

4. Database Indexing

Schema::table('users', function (Blueprint $table) {
    $table->index('email');
    $table->index(['status', 'created_at']);
});

5. Optimize Composer Autoloader

composer dump-autoload --optimize

6. Use Queue for Heavy Tasks

// Instead of processing immediately
Mail::to($user)->send(new WelcomeEmail());

// Queue it
Mail::to($user)->queue(new WelcomeEmail());

7. Config Caching

php artisan config:cache

8. Use Redis for Sessions

// config/session.php
'driver' => env('SESSION_DRIVER', 'redis'),

Performance Checklist

  • ✅ Enable OPcache in production
  • ✅ Use eager loading to prevent N+1
  • ✅ Cache configuration and routes
  • ✅ Add database indexes
  • ✅ Use queue for async tasks
  • ✅ Enable Redis for cache/sessions
  • ✅ Optimize Composer autoloader
  • ✅ Use CDN for assets

Monitoring

Use Laravel Telescope or Debugbar to identify bottlenecks:

composer require laravel/telescope --dev
php artisan telescope:install

Results

Applying these techniques typically results in:

  • 50-70% reduction in response time
  • 40-60% reduction in database queries
  • Better user experience