A Laravel application that feels slow is usually not the framework's fault, but rather unoptimized configuration and code. Here are 8 practical steps to speed up Laravel in production, starting with the easiest.
1. Cache Config, Route, and View
In production, cache your configuration so Laravel doesn't read many files on every request:
php artisan config:cache
php artisan route:cache
php artisan view:cache
This is one of the fastest improvements. Note: re-run these every time you change config or routes.
2. Optimize the Composer Autoloader
composer install --optimize-autoloader --no-dev
3. Avoid N+1 Queries with Eager Loading
The most common performance issue: loading relationships inside a loop. Use with() for eager loading:
// SLOW (N+1 queries)
$posts = Post::all();
foreach ($posts as $post) { echo $post->user->name; }
// FAST (eager loading)
$posts = Post::with('user')->get();
4. Select Only the Columns You Need
Don't always SELECT *. Retrieve only the columns you need:
$users = User::select('id', 'name', 'email')->get();
5. Use Pagination for Large Datasets
Displaying thousands of rows at once burdens memory. Use pagination:
$posts = Post::paginate(20);
6. Leverage Cache for Heavy Queries
Store the results of rarely-changing queries in the cache:
use Illuminate\Support\Facades\Cache;
$categories = Cache::remember('categories', 3600, function () {
return Category::all();
});
7. Move Heavy Tasks to a Queue
Processes like sending email or handling images shouldn't hold up the response. Run them through a queue so the page feels instant to users:
ProcessPodcast::dispatch($podcast);
8. Enable Gzip & Asset Caching
On the server side (Nginx/Apache), enable Gzip compression and caching for static files (CSS/JS/images) so the browser doesn't re-download them on every visit. Combine this with production asset builds (npm run build).
Bonus: Measure First, Then Optimize
Use a tool like Laravel Debugbar or Telescope to see which queries are slow. Well-targeted optimization is far more effective than guessing.
Conclusion
Speeding up Laravel starts with simple things: caching config/route/view and optimizing the autoloader, then moving on to query improvements (eager loading, selecting columns, pagination), caching, and queues. Apply these gradually while measuring, and your application will feel much lighter. For an optimal server setup, see the guide on deploying Laravel to an Ubuntu VPS with Nginx.