Laravel hastighet och prestandaoptimering 101 – Riktlinjen

hastighet-1249610_1920Jag arbetar med en ganska tung Laravel-sajt med många förfrågningar och massor av vältaliga/SQL-anrop. Även om VPS med högt minne och hög cpu, kände jag att det finns utrymme för prestandaförbättringar. Det är därför jag skulle vilja skriva ut några förbättringar för att påskynda Laravel:

1. Använd Database eller Redis för cache och sessioner

När du navigerar till config/cache.php och config/session.php ser du att standardfilen CACHE_DRIVER och SESSION_DRIVER =. Om du har Redis installerat, försök bara att ställa in det som en cache- och sessionsdrivrutin. Kontrollera om Redis är installerat genom att köra:

redis-cli

Om det är installerat, försök att definiera drivrutinerna i din .env-fil:

CACHE_DRIVER=redis SESSION_DRIVER=redis

🤓😎 Fler och fler människor får våra tips om nördar, integritet, utveckling och livsstil

Vill du få de senaste bloggarna om nördar, integritet, utveckling och livsstil? Prenumerera på vårt nyhetsbrev.

2. Använd flera förgjorda hantverkskommandon

Det finns olika hantverkare kommandon som är gjorda för att cache flera delar av Laravel. Du kan konfigurera dem i distributionsprocessen av Laravel Forge eller Envoyer:

php artisan route:cache php artisan config:cache php artisan optimize --force

 

Använd riktlinjerna för utvecklarverktyg

Gör en körning på https://developers.google.com/web/fundamentals/performance/ och optimera flera steg:

3. Optimera bilder som PNG och JPEG

Bilder har ibland värdelös extra data som kan optimeras förlustfritt. Därför kan du använda paketen OptiPNG och JPEGOptim. Installera OptiPNG i Ubuntu:

sudo apt-get update sudo apt-get install optipng

Och installera även JPEGOptim:

sudo apt-get installera jpegoptim

Navigera nu till mappen där du vill optimera dess bilder. För att välja körning:

välja *

För körning av jpegoptim:

för i i *.jpg; gör jpegoptim --all-progressive "$i"; gjort

Observera att även underkatalogerna kan vara optimerade

4. Använd HTTP2 istället för HTTP 1.1 om du har ett SSL-certifikat aktiverat

Följande riktlinje hjälper dig igenom processen att uppdatera till HTTP2 i Nginx.

Observera att du måste ha ett SSL-certifikat. Google PageSpeed gav en förändring av serverhastigheten från 0,52s (utan HTTP2, med SSL) till 0,35s (med HTTP2)

Resultat: Cirka 30% hastighetsökning

5. Cache-svar i Redis eller File

Ibland är det onödigt att sidan anropas från en databas många gånger. Att bara cachelagra sidan minskar en del belastning. Det är exakt samma idé Laravel Response Cache-plugin. Installationsinstruktionerna är ganska bra. I mitt fall hade den en drastisk prestandaförbättring.

Resultat: ca 200 ms hastighetsökning i mitt fall

6. Optimera InnoDB innodb_buffer_pool_size

Jag är inte säker på varför, men av någon anledning har InnoDB en riktigt liten innodb_buffer_pool_size när du distribuerar din initiala Laravel Forge-server. I mitt standardfall var innodb_buffer_pool_size 8MB, medan vissa bloggar uppskattar att du kan reservera upp till 80% av din ram för innodb_buffer_pool_size. Så redigera filen my.conf:

sudo nano /etc/mysql/my.cnf

Och lägg till till exempel:

innodb_buffer_pool_size = 1G

Resultat: Flera gånger snabbare frågor

7. Minska belastningen genom att lägga till swap

Min server hade regelbundet problem med Redis fullt minne och hög belastning. Detta löstes genom att lägga till lite swap till Ubuntu. Som beskrivs av DigitalOcean:

Ett av de enklaste sätten att öka responsen på din server och skydda mot minnesfel i dina applikationer är att lägga till lite swap-utrymme. Swap är ett område på en hårddisk som har utsetts till en plats där operativsystemet tillfälligt kan lagra data som det inte längre kan hålla i RAM.

Läs mer om att lägga till byte på DigitalOceans webbplats.

Resultat: en minskning av belastningen vid inmatning av kommandot 'topp'

8. Använd Eager Loading istället för Lazy Loading

När du använder Laravel Eloquent-modeller med relationer är det frestande att använda "lat laddning". Det är ett sätt att få relationsmodeller i en loop. Till exempel:

kommentarer->namn; }

På detta sätt kommer kommentarerna att laddas i separata frågor för varje blogg. När du använder Eager loading kommer kommentarerna att laddas i ONE IN-frågan:

få(); foreach ($bloggar som $blogg) { echo $blog->kommentarer->namn; }

Läs mer om Eager Loading på Laravels dokumentation.

Hur hittar man frågor som kan behöva optimeras?

Vet du inte hur man hittar frågor som kan behöva optimeras? T.ex. som kanske behöver ivrig lastning istället för lat lastning? Det enklaste sättet är att installera och aktivera Laravel Debugbar på din utvecklingsserver. Med detta verktygsfält kan du se frågorna per sida. Om du ser massor av frågor som kunde ha förenklats med en enkel sammanfogning eller in-query, vet du att det är din kö för att optimera det skriptet med ivriga laddningar.

Resultat: Varje fråga sparad, några millisekunder per fråga

Den här listan är fortfarande en pågående lista, även om tipsen ovan gav mig en hastighetsförbättring på MER ÄN 1 SEKUND. Har du några tips, låt mig veta i kommentarerna!

Dela också med dig av dina hastighetsförbättringar 🙂

Senast uppdaterad 23 juli 2018

5 reaktioner på ”Laravel Speed and Performance Optimization 101 – The Guideline”

  1. Tack, det är mycket informativt och användbart.

    Där hittade jag några coola stavfel:
    R7. utbilda….
    Jag antar att det borde vara det
    7. Minska ….

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen