Skip to main content
Laravel Applications

How We Optimized a Laravel Application for Lightning-Fast Performance on Shared Hosting

How We Optimized a Laravel Application for Lightning-Fast Performance on Shared Hosting Introduction Running Laravel applications on shared hosting pr...

5 min read
949 words
How We Optimized a Laravel Application for Lightning-Fast Performance on Shared Hosting
Featured image for How We Optimized a Laravel Application for Lightning-Fast Performance on Shared Hosting

How We Optimized a Laravel Application for Lightning-Fast Performance on Shared Hosting

Introduction

Running Laravel applications on shared hosting presents unique challenges — limited memory, restricted CPU resources, no root access, and constrained I/O operations can slow down even well-built projects.

We recently optimized a Laravel 11 production application on shared hosting that was suffering from serious performance bottlenecks:

  • Homepage load times exceeding 3 seconds
  • Database queries ballooning to 120+ per page
  • Users reporting noticeable interface lag

After systematic analysis and layered optimizations, we achieved remarkable performance gains:

Final Results:

  • Blog page: 250 ms → 98 ms (61% faster)
  • Homepage: 323 ms → 150 ms (40% faster)
  • Freelance services page: 400 ms → 180 ms (55% faster)
  • Database queries: 120 + → 15–40 per page (60–85% reduction)

This case study documents each phase of the process so any Laravel developer facing similar constraints can replicate the results.


1. Understanding Shared Hosting Limitations

Shared hosting environments impose several resource restrictions that directly affect Laravel’s performance.

Key Limitations

  • Memory Limits: 128 MB–256 MB PHP limit (vs 512 MB+ on VPS)
  • CPU Throttling: Shared CPU cores → unpredictable slowdowns
  • No Root Access: Cannot install Redis or adjust PHP modules
  • File-Based Sessions/Cache: Slow disk I/O vs in-memory
  • Limited DB Connections: Pooled MySQL with connection caps
  • Disk I/O Contention: Competes with hundreds of tenants

Why It Matters

Laravel’s elegance adds overhead:

  • ORM abstractions introduce N + 1 query risk
  • Blade compilation on each request costs CPU cycles
  • Route resolution without caching adds milliseconds
  • File sessions create I/O bottlenecks
  • Config parsing on every request wastes CPU time

Understanding these constraints clarifies what to optimize first.


2. Identifying Bottlenecks

Before fixing anything, we profiled every layer to find the real culprits.

Tools Used

Laravel Telescope (Dev-only)

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

Findings:

  • 120+ queries on homepage
  • N + 1 patterns in Post / Product models
  • Duplicate category + author queries
  • Unindexed LIKE searches

Laravel Debugbar (Local)

composer require barryvdh/laravel-debugbar --dev

Revealed:

  • 450 ms Blade rendering
  • 89 duplicate portfolio queries
  • Costly global queries in ViewServiceProvider

Manual Profiling

$start = microtime(true);
\App\Models\Blog\Post::with('author','category')->limit(10)->get();
echo (microtime(true)-$start)*1000 . " ms\n";

Server Log Tail

tail -f storage/logs/laravel.log
tail -f /var/log/nginx/error.log

Typical Problems

  1. N + 1 queries everywhere
  2. Missing cache layers
  3. Inefficient global service providers
  4. Unindexed database columns
  5. OPcache disabled
  6. Oversized JS + image assets

3. Core Optimization Steps

Step 1 — Enable Framework Caching

php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

Impact: ≈ 40 ms faster bootstrap per request.

Step 2 — Optimize Composer Autoloading

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

Impact: 15–20 ms gain.

Step 3 — Activate OPcache

In .user.ini (shared hosting safe):

opcache.enable=1
opcache.revalidate_freq=60

Impact: 30–50 % faster PHP execution.

Step 4 — Switch to Database Cache

php artisan cache:table
php artisan session:table
php artisan migrate

.env

CACHE_DRIVER=database
SESSION_DRIVER=database

Impact: 40–60 % faster read/write than file-based cache.

Step 5 — Optimize Assets with Vite

npm ci && npm run build

Enable gzip + expires in .htaccess for compression and caching. Result: Page size 2.5 MB → 0.85 MB (–66 %).


4. Database Optimization

Eliminating N + 1 Queries

Before

$posts = Post::paginate(10);

After

$posts = Post::with(['author','category'])
             ->latest('published_at')
             ->paginate(10);

Queries: 21 → 3.

Adding Indexes

Schema::table('blog_posts', fn($t)=>$t->index('title'));
Schema::table('shop_products', fn($t)=>$t->index('name'));

Search speed: 150 ms → 40 ms.

Caching Frequent Queries

$latestPosts = Cache::remember('blog_latest_posts', 3600, fn() =>
    Post::with('author','category')->latest()->limit(3)->get()
);

Homepage queries: 48 → 12 (–75 %).


5. Smart Caching Strategy

Full-Page Response Cache

Install Spatie Response Cache:

composer require spatie/laravel-responsecache

Custom profile disables caching for admin or POST routes.

Impact: Response time cut by ≈ 50 %.


6. Reducing Frontend Payload

  • Convert images → WebP (+ lazy-load)
  • Preload fonts to remove FOUT
  • Use Vite minification + vendor splitting

JS Bundle: 890 KB → 285 KB (–68 %) LCP Improvement: ≈ –200 ms.


7. Deployment & Maintenance

Deploy Script

git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize:clear && php artisan responsecache:clear
php artisan optimize
npm ci && npm run build
sudo service php8.3-fpm reload
php artisan cache:warmup

Scheduled Tasks

$schedule->command('cache:warmup')->everySixHours();
$schedule->command('session:gc')->weekly();

8. Real Results

| Page | Before | After | Gain | | ------------------ | ------ | ------ | ---- | | Blog Index | 250 ms | 98 ms | 61 % | | Homepage | 323 ms | 150 ms | 40 % | | Freelance Services | 400 ms | 180 ms | 55 % | | Product Detail | 510 ms | 185 ms | 64 % |

| Metric | Before | After | | | ----------------- | ------ | ------ | ----- | | Queries / page | 120 + | 15–40 | –85 % | | Total Page Size | 4.8 MB | 1.2 MB | –75 % | | Fully Loaded Time | 6.2 s | 1.8 s | –71 % |

Lighthouse Scores

| | Before | After | | -------------- | ------ | ----- | | Performance | 42 | 94 | | Accessibility | 87 | 95 | | Best Practices | 79 | 92 | | SEO | 91 | 100 |


9. Key Lessons Learned

What Worked Best

  1. Eager-loading to eliminate N + 1 queries
  2. Response cache for repeat traffic
  3. DB indexes for frequent lookups
  4. OPcache for execution speed
  5. Asset minification & lazy loading

Mistakes to Avoid

  • Don’t cache authenticated pages
  • Always clear caches post-deploy
  • Don’t optimize blindly — measure first
  • Warm critical caches after deployment

Monitoring Checklist

✅ Laravel Telescope (staging) ✅ Debugbar (local) ✅ Monthly Lighthouse audit ✅ < 30 queries per page ✅ Track cache hit rate ✅ GTmetrix load time trend


Conclusion

Optimizing Laravel on shared hosting is absolutely possible.

Key actions:

  1. Profile first, then prioritize fixes
  2. Cache everything that can be cached
  3. Eliminate N + 1 queries and add indexes
  4. Minify assets and compress delivery
  5. Automate deploy + cache warming

With methodical tuning, even modest hosting can deliver sub-200 ms responses and near-perfect Lighthouse scores.


Further Reading


Conclusion

Optimizing Laravel applications on shared hosting is challenging — but achievable with the right strategy.
If you’d like expert help improving your app’s speed, caching, and scalability,
you can hire me on Fiverr for professional Laravel and WordPress optimization services.

All results and examples in this article are from a real Laravel 11 production environment optimized by our engineering team.

Engr Mejba Ahmed

About the Author

Engr Mejba Ahmed

I'm Engr. Mejba Ahmed, a Software Engineer, Cybersecurity Engineer, and Cloud DevOps Engineer specializing in Laravel, Python, WordPress, cybersecurity, and cloud infrastructure. Passionate about innovation, AI, and automation.

Related Topics

Continue Learning

Browse All Articles