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