Laravel Snelheid en prestatie-optimalisatie 101 – De richtlijn

snelheid-1249610_1920Ik werk met een vrij zware Laravel-site met veel verzoeken en veel Eloquent/SQL-aanroepen. Ondanks de VPS met veel geheugen en veel CPU, vond ik dat er ruimte was voor prestatieverbetering. Daarom wil ik graag wat verbeteringen opschrijven om Laravel te versnellen:

1. Gebruik Database of Redis voor cache en sessies

Wanneer u naar config/cache.php en config/session.php navigeert, ziet u dat de standaard CACHE_DRIVER en SESSION_DRIVER = bestand. Als u Redis hebt geïnstalleerd, probeer het dan gewoon in te stellen als een cache en sessie driver. Controleer of Redis is geïnstalleerd door het volgende uit te voeren:

redis-cli

Als het is geïnstalleerd, probeer dan de drivers te definiëren in uw .env-bestand:

CACHE_DRIVER=redis SESSIE_DRIVER=redis

2. Gebruik verschillende kant-en-klare opdrachten van de ambachtsman

Er zijn verschillende ambachtelijke opdrachten die zijn gemaakt om verschillende delen van Laravel te cachen. Je kunt ze configureren in het implementatieproces van Laravel Forge of Envoyer:

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

 

Richtlijnen voor het gebruik van ontwikkelaarshulpmiddelen

Voer een run uit op https://developers.google.com/web/fundamentals/performance/ en optimaliseer verschillende stappen:

3. Optimaliseer afbeeldingen zoals PNG's en JPEG's

Afbeeldingen bezitten soms nutteloze extra data die lossless geoptimaliseerd kunnen worden. Daarom kunt u de pakketten gebruiken OptiPNG en JPEGOptim. Installeer OptiPNG in Ubuntu:

sudo apt-get update sudo apt-get install optie

En installeer ook JPEGOptim:

sudo apt-get installeer jpegoptim

Navigeer nu naar de map waarvan u de afbeeldingen wilt optimaliseren. Voor optipng voert u het volgende uit:

optellen *

Voor jpegoptim voer je het volgende uit:

voor i in *.jpg; doe jpegoptim --all-progressive "$i"; gedaan

Houd er rekening mee dat ook de submappen geoptimaliseerd kunnen zijn

4. Gebruik HTTP2 in plaats van HTTP 1.1 als u een SSL-certificaat hebt ingeschakeld

De volgende richtlijn helpt u hierbij: het proces van updaten naar HTTP2 in Nginx.

Let op dat u een SSL-certificaat nodig hebt. Google PageSpeed gaf een verandering in de serversnelheid van 0,52s (zonder HTTP2, met SSL) naar 0,35s (met HTTP2)

Resultaat: Ongeveer 30% snelheidsverhoging

5. Cache-respons in Redis of Bestand

Soms is het onnodig dat de pagina meerdere keren vanuit een database wordt aangeroepen. Alleen al het cachen van de pagina vermindert de belasting aanzienlijk. Dat is precies hetzelfde idee van de Laravel Response Cache-plug-in. De installatie-instructies zijn behoorlijk goed. In mijn geval was er een drastische prestatieverbetering.

Resultaat: in mijn geval een snelheidsverhoging van ongeveer 200 ms

6. Optimaliseer InnoDB innodb_buffer_pool_size

Ik weet niet waarom, maar om een of andere reden heeft InnoDB een heel kleine innodb_buffer_pool_size bij het implementeren van je eerste Laravel Forge-server. In mijn standaardgeval was de innodb_buffer_pool_size 8 MB, terwijl sommige blogs schatten dat je tot 80% van uw ram voor innodb_buffer_pool_sizeBewerk dus het bestand my.conf:

sudo nano /etc/mysql/my.cnf

En voeg bijvoorbeeld toe:

innodb_buffer_pool_grootte = 1G

Resultaat: Meerdere malen snellere query's

7. Verminder de belasting door swap toe te voegen

Mijn server had regelmatig Redis full-memory problemen en hoge belastingen. Dit werd opgelost door wat swap toe te voegen aan Ubuntu. Zoals beschreven door DigitalOcean:

Een van de makkelijkste manieren om de responsiviteit van uw server te vergroten en u te beschermen tegen out of memory errors in uw applicaties is om wat swap space toe te voegen. Swap is een gebied op een harde schijf dat is aangewezen als een plek waar het besturingssysteem tijdelijk data kan opslaan die het niet langer in het RAM kan bewaren.

Lees meer over het toevoegen van swap op de DigitalOcean-website.

Resultaat: een vermindering van de belasting bij het invoeren van het 'top'-commando

8. Eager Loading gebruiken in plaats van Lazy Loading

Bij het gebruik van Laravel Eloquent-modellen met relaties is het verleidelijk om 'lazy loading' te gebruiken. Dat is een manier om relationele modellen in een lus te krijgen. Bijvoorbeeld:

opmerkingen->naam; }

Op deze manier worden de opmerkingen voor elke blog in aparte query's geladen. Bij gebruik van Eager loading worden de opmerkingen in ONE IN query geladen:

get(); foreach ($blogs als $blog) { echo $blog->comments->name; }

Lees meer over Eager Loading op Laravel's documentatie.

Hoe vind ik zoekopdrachten die geoptimaliseerd moeten worden?

Weet u niet hoe u query's kunt vinden die mogelijk geoptimaliseerd moeten worden? Bijvoorbeeld die eager loading nodig hebben in plaats van lazy loading? De eenvoudigste manier is om te installeren en in te schakelen Laravel-debugbalk op uw ontwikkelserver. Met deze werkbalk kunt u de query's per pagina bekijken. Als u veel query's ziet die vereenvoudigd hadden kunnen worden met een simpele join of in-query, weet u dat het uw wachtrij is om dat script te optimaliseren met eager loading.

Resultaat: Elke query opgeslagen, een paar milliseconden per query

Deze lijst is nog steeds een work-in-progress lijst, hoewel bovenstaande tips mij een snelheidsverbetering van MEER DAN 1 SECONDE gaven. Heb je tips, laat het me weten in de comments!

Deel ook je snelheidsverbeteringen 🙂

5 gedachten over “Laravel Speed and Performance Optimization 101 – The Guideline”

  1. Bedankt, het is erg informatief en nuttig.

    Daar vond ik een leuke typefout:
    R7. opleiden ….
    Ik denk dat het zo zou moeten zijn
    7. Verminder ….

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands
Scroll naar boven