Milind Daraniya

Laravel Performance Optimization: 25 Practical Tips for Faster Applications

Published July 13th, 2026 9 min read

Performance is one of the most important factors in any web application.

Users expect pages to load quickly and APIs to respond instantly. A slow application can lead to poor user experience, reduced productivity, and even loss of customers.

Many developers think performance problems only happen when applications become very large. In reality, performance issues often start because of small mistakes made during development.

The good news is that Laravel provides many built-in features that help improve performance.

In this article, I will share practical Laravel optimization techniques that I use regularly in real-world projects.

These tips are useful for:

SaaS Applications

ERP Systems

CRM Software

Ecommerce Platforms

REST APIs

Admin Panels


Why Laravel Applications Become Slow

Common reasons include:

Too many database queries

Missing indexes

N+1 query problems

Unoptimized images

Excessive data loading

Poor caching strategy

Large JavaScript bundles

Slow third-party APIs

Before optimizing, identify the actual bottleneck.

Never guess.

Always measure first.


1. Use Eager Loading

One of the most common Laravel mistakes is the N+1 query problem.

Bad:

$orders = Order::all();

foreach ($orders as $order) {
    echo $order->customer->name;
}

This generates multiple queries.

Better:

$orders = Order::with('customer')->get();

Benefits:

Fewer queries

Faster page loads

Lower database load


2. Select Only Required Columns

Bad:

$customers = Customer::all();

Better:

$customers = Customer::select(
    'id',
    'name',
    'email'
)->get();

Only retrieve necessary data.


3. Use Pagination

Bad:

$orders = Order::get();

Better:

$orders = Order::paginate(50);

Benefits:

Reduced memory usage

Faster responses

Better user experience


4. Add Database Indexes

Frequently searched columns should be indexed.

Example:

$table->index('email');

Useful for:

email

mobile

sku

invoice_number

order_number

Indexes can dramatically improve query speed.


5. Cache Application Configuration

Run:

php artisan config:cache

This combines configuration files into a single cached file.

Useful in production environments.


6. Cache Routes

Run:

php artisan route:cache

Benefits:

Faster route registration

Better application startup performance


7. Cache Views

Run:

php artisan view:cache

Blade templates are compiled in advance.


8. Optimize Composer Autoloading

Run:

composer install --optimize-autoloader --no-dev

This improves class loading performance.


9. Avoid Unnecessary Service Providers

Every service provider increases application boot time.

Review installed packages regularly.

Remove packages that are no longer needed.


10. Use Queue Jobs

Bad:

Mail::to($user)->send(
    new WelcomeEmail()
);

during a request.

Better:

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

Benefits:

Faster user response

Better scalability


11. Optimize Images

Large images slow applications significantly.

Recommended:

Compress images

Resize before upload

Use WebP format

This is especially important for ecommerce websites.


12. Use Lazy Collections for Large Datasets

Bad:

$customers = Customer::all();

Better:

Customer::lazy()->each(
    function ($customer) {
        //
    }
);

Useful for imports and exports.


13. Use Chunk Processing

Example:

Customer::chunk(
    100,
    function ($customers) {
        //
    }
);

Prevents memory exhaustion.


14. Cache Frequently Used Data

Example:

$settings = Cache::remember(
    'settings',
    3600,
    fn() => Setting::all()
);

Perfect for:

Settings

Categories

Countries

Static content


15. Avoid Repeated Queries

Bad:

$count = Customer::count();

$total = Customer::count();

Better:

$count = Customer::count();

$total = $count;

Small optimizations add up.


16. Use Database Transactions

Example:

DB::transaction(function () {

    // Create order

    // Create items

    // Update stock

});

Improves consistency and reliability.


17. Monitor Queries

Install Debugbar:

composer require barryvdh/laravel-debugbar --dev

Watch:

Query count

Execution time

Memory usage

This helps identify bottlenecks quickly.


18. Optimize API Responses

Bad:

return Customer::all();

Better:

return CustomerResource::collection(
    $customers
);

Only expose required data.


19. Use API Pagination

Example:

return Customer::paginate(25);

Never return thousands of records at once.


20. Minimize Middleware

Too many middleware layers increase request processing time.

Review middleware regularly.

Keep only what is necessary.


21. Optimize Logging

Avoid excessive logging.

Bad:

Log::info($largeArray);

for every request.

Large logs consume storage and reduce performance.


22. Use Proper Relationships

Example:

belongsTo()

hasMany()

belongsToMany()

Use relationships correctly instead of writing manual queries everywhere.


23. Reduce Package Dependencies

Many projects install unnecessary packages.

Each package:

Adds complexity

Increases maintenance

May affect performance

Review dependencies periodically.


24. Optimize Frontend Assets

Use:

npm run build

for production.

Benefits:

Smaller files

Faster downloads

Better performance


25. Monitor Server Resources

Check:

top
free -h
df -h

Sometimes the problem is not Laravel.

The issue may be:

CPU

Memory

Disk

Network

Always investigate the full stack.


Real Example: Slow Customer Listing

Bad:

$customers = Customer::with(
    'orders',
    'payments',
    'activities',
    'addresses'
)->get();

If there are thousands of records, performance suffers.

Better:

$customers = Customer::select(
    'id',
    'name',
    'email'
)->paginate(50);

Load only what is needed.


Real Example: Slow Dashboard

Many dashboards execute:

20+
Queries

for every page load.

Solution:

Cache statistics

Cache reports

Cache settings

Example:

$totalSales = Cache::remember(
    'total_sales',
    600,
    fn() => Order::sum('total')
);

This significantly reduces database load.


Production Deployment Commands

After deployment:

php artisan optimize

php artisan config:cache

php artisan route:cache

php artisan view:cache

These commands improve production performance.


Common Performance Mistakes

Using get() Everywhere

Use pagination when possible.


No Database Indexes

One of the biggest performance killers.


Ignoring N+1 Queries

Always check relationships.


Loading Too Much Data

Retrieve only what is required.


No Caching Strategy

Caching can dramatically improve performance.


Laravel Performance Checklist

Before going live:

✔ Add indexes

✔ Use eager loading

✔ Use pagination

✔ Cache routes

✔ Cache configuration

✔ Cache views

✔ Optimize images

✔ Monitor queries

✔ Use queues

✔ Build frontend assets


Which Optimization Gives the Biggest Benefit?

In most projects:

Database indexes

Eager loading

Caching

Pagination

Queue processing

These five improvements often provide the biggest gains.


Final Thoughts

Laravel is already a fast and productive framework, but poor development practices can make any application slow.

The good news is that most performance issues can be solved without upgrading servers.

Focus on:

Better queries

Proper indexing

Caching

Pagination

Queue processing

Measure performance, identify bottlenecks, and optimize based on real data.

A well-optimized Laravel application can easily handle large amounts of traffic while providing an excellent user experience.

Frequently Asked Questions

Is Laravel slow?

No. Most performance issues come from application code, database queries, or server configuration.

What is the biggest Laravel performance mistake?

The N+1 query problem is one of the most common issues.

Should I use caching?

Yes. Caching can significantly reduce database load and improve response times.

Are indexes important?

Absolutely. Proper indexes often provide the largest performance improvement.

Should APIs use pagination?

Yes. Returning thousands of records at once is inefficient.

Do I need a powerful server for Laravel?

Not always. A properly optimized application often performs well even on modest infrastructure.