Hoe We een Laravel Applicatie Optimaliseerden voor Razendsnelle Prestaties op Shared Hosting
Inleiding
Het draaien van Laravel applicaties op shared hosting brengt unieke uitdagingen met zich mee — beperkt geheugen, beperkte CPU-bronnen, geen root-toegang en beperkte I/O-bewerkingen kunnen zelfs goed gebouwde projecten vertragen.
We hebben onlangs een Laravel 11 productieapplicatie op shared hosting geoptimaliseerd die leed onder ernstige prestatieknelpunten:
- Laadtijden van de homepagina van meer dan 3 seconden
- Database queries die opliepen tot 120+ per pagina
- Gebruikers die merkbare interface-vertraging rapporteerden
Na systematische analyse en gelaagde optimalisaties behaalden we opmerkelijke prestatieverbeteringen:
Eindresultaten:
- Blogpagina: 250 ms → 98 ms (61% sneller)
- Homepagina: 323 ms → 150 ms (40% sneller)
- Freelance servicepagina: 400 ms → 180 ms (55% sneller)
- Database queries: 120+ → 15–40 per pagina (60–85% reductie)
Deze casestudy documenteert elke fase van het proces zodat elke Laravel-ontwikkelaar met vergelijkbare beperkingen de resultaten kan repliceren.
1. Beperkingen van Shared Hosting Begrijpen
Shared hosting-omgevingen leggen verschillende bronbeperkingen op die direct invloed hebben op de prestaties van Laravel.
Belangrijkste Beperkingen
- Geheugenlimieten: 128 MB–256 MB PHP-limiet (vs 512 MB+ op VPS)
- CPU Throttling: Gedeelde CPU-cores → onvoorspelbare vertragingen
- Geen Root-Toegang: Kan geen Redis installeren of PHP-modules aanpassen
- Bestandsgebaseerde Sessions/Cache: Trage schijf-I/O vs in-memory
- Beperkte DB Verbindingen: Gepoold MySQL met verbindingslimieten
- Schijf-I/O Concurrentie: Concurreert met honderden tenants
Waarom Het Belangrijk Is
De elegantie van Laravel brengt overhead met zich mee:
- ORM-abstracties introduceren N + 1 query risico
- Blade compilatie bij elk verzoek kost CPU-cycli
- Route-resolutie zonder caching voegt milliseconden toe
- Bestandssessies creëren I/O-knelpunten
- Config parsing bij elk verzoek verspilt CPU-tijd
Het begrijpen van deze beperkingen verduidelijkt wat eerst geoptimaliseerd moet worden.
2. Knelpunten Identificeren
Voordat we iets repareerden, profileerden we elke laag om de echte boosdoeners te vinden.
Gebruikte Tools
Laravel Telescope (Alleen Dev)
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
Bevindingen:
- 120+ queries op de homepagina
- N + 1 patronen in Post / Product modellen
- Dubbele categorie + auteur queries
- Niet-geïndexeerde LIKE zoekopdrachten
Laravel Debugbar (Lokaal)
composer require barryvdh/laravel-debugbar --dev
Onthulde:
- 450 ms Blade rendering
- 89 dubbele portfolio queries
- Kostbare globale queries in
ViewServiceProvider
Handmatige Profilering
$start = microtime(true);
\App\Models\Blog\Post::with('author','category')->limit(10)->get();
echo (microtime(true)-$start)*1000 . " ms\n";
Server Log Controle
tail -f storage/logs/laravel.log
tail -f /var/log/nginx/error.log
Typische Problemen
- N + 1 queries overal
- Ontbrekende cachelagen
- Inefficiënte globale service providers
- Niet-geïndexeerde databasekolommen
- OPcache uitgeschakeld
- Te grote JS + afbeelding-assets
3. Kernoptimalisatiestappen
Stap 1 — Framework Caching Inschakelen
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
Impact: ≈ 40 ms snellere bootstrap per verzoek.
Stap 2 — Composer Autoloading Optimaliseren
composer install --no-dev --optimize-autoloader
Impact: 15–20 ms winst.
Stap 3 — OPcache Activeren
In .user.ini (shared hosting veilig):
opcache.enable=1
opcache.revalidate_freq=60
Impact: 30–50% snellere PHP-uitvoering.
Stap 4 — Overschakelen naar Database Cache
php artisan cache:table
php artisan session:table
php artisan migrate
.env
CACHE_DRIVER=database
SESSION_DRIVER=database
Impact: 40–60% sneller lezen/schrijven dan bestandsgebaseerde cache.
Stap 5 — Assets Optimaliseren met Vite
npm ci && npm run build
Schakel gzip + expires in via .htaccess voor compressie en caching.
Resultaat: Paginagrootte 2,5 MB → 0,85 MB (–66%).
4. Database Optimalisatie
N + 1 Queries Elimineren
Voor
$posts = Post::paginate(10);
Na
$posts = Post::with(['author','category'])
->latest('published_at')
->paginate(10);
Queries: 21 → 3.
Indexen Toevoegen
Schema::table('blog_posts', fn($t)=>$t->index('title'));
Schema::table('shop_products', fn($t)=>$t->index('name'));
Zoeksnelheid: 150 ms → 40 ms.
Frequente Queries Cachen
$latestPosts = Cache::remember('blog_latest_posts', 3600, fn() =>
Post::with('author','category')->latest()->limit(3)->get()
);
Homepagina queries: 48 → 12 (–75%).
5. Slimme Cachingstrategie
Volledige Pagina Response Cache
Installeer Spatie Response Cache:
composer require spatie/laravel-responsecache
Aangepast profiel schakelt caching uit voor admin- of POST-routes.
Impact: Responstijd met ≈ 50% verlaagd.
6. Frontend Payload Verminderen
- Afbeeldingen converteren → WebP (+ lazy-load)
- Lettertypen voorladen om FOUT te verwijderen
- Vite minificatie + vendor splitting gebruiken
JS Bundle: 890 KB → 285 KB (–68%) LCP Verbetering: ≈ –200 ms.
7. Deployment & Onderhoud
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
Geplande Taken
$schedule->command('cache:warmup')->everySixHours();
$schedule->command('session:gc')->weekly();
8. Echte Resultaten
| Pagina | Voor | Na | Winst |
|---|---|---|---|
| Blog Index | 250 ms | 98 ms | 61% |
| Homepagina | 323 ms | 150 ms | 40% |
| Freelance Services | 400 ms | 180 ms | 55% |
| Product Detail | 510 ms | 185 ms | 64% |
| Metriek | Voor | Na | |
|---|---|---|---|
| Queries / pagina | 120+ | 15–40 | –85% |
| Totale Paginagrootte | 4,8 MB | 1,2 MB | –75% |
| Volledig Geladen Tijd | 6,2 s | 1,8 s | –71% |
Lighthouse Scores
| Voor | Na | |
|---|---|---|
| Performance | 42 | 94 |
| Accessibility | 87 | 95 |
| Best Practices | 79 | 92 |
| SEO | 91 | 100 |
9. Belangrijkste Lessen
Wat Het Beste Werkte
- Eager-loading om N + 1 queries te elimineren
- Response cache voor terugkerend verkeer
- DB indexen voor frequente lookups
- OPcache voor uitvoeringssnelheid
- Asset minificatie & lazy loading
Fouten om te Vermijden
- Cache geen geauthenticeerde pagina's
- Wis altijd caches na deployment
- Optimaliseer niet blindelings — meet eerst
- Warm kritische caches op na deployment
Monitoring Checklist
✅ Laravel Telescope (staging) ✅ Debugbar (lokaal) ✅ Maandelijkse Lighthouse audit ✅ < 30 queries per pagina ✅ Cache hit rate bijhouden ✅ GTmetrix laadtijd trend
Conclusie
Het optimaliseren van Laravel op shared hosting is absoluut mogelijk.
Belangrijkste acties:
- Profileer eerst, prioriteer dan de fixes
- Cache alles wat gecacht kan worden
- Elimineer N + 1 queries en voeg indexen toe
- Minificeer assets en comprimeer levering
- Automatiseer deploy + cache warming
Met methodisch afstemmen kunnen zelfs bescheiden hostingoplossingen sub-200 ms responstijden en bijna perfecte Lighthouse scores leveren.
Verder Lezen
- Laravel Performance Optimization Docs
- Spatie Response Cache Package
- Laravel Query Optimization Guide
Conclusie
Het optimaliseren van Laravel applicaties op shared hosting is uitdagend — maar haalbaar met de juiste strategie.
Als je deskundige hulp wilt bij het verbeteren van de snelheid, caching en schaalbaarheid van je app,
kun je mij inhuren op Fiverr voor professionele Laravel en WordPress optimalisatiediensten.
Alle resultaten en voorbeelden in dit artikel zijn afkomstig van een echte Laravel 11 productieomgeving geoptimaliseerd door ons engineeringteam.