Ottimizzazione della velocità e delle prestazioni di Laravel 101 – La linea guida

velocità-1249610_1920Sto lavorando con un sito Laravel piuttosto pesante con molte richieste e molte chiamate Eloquent/SQL. Nonostante il VPS ad alta memoria e alta CPU, ho pensato che ci fosse spazio per migliorare le prestazioni. Ecco perché vorrei scrivere alcuni miglioramenti per velocizzare Laravel:

1. Utilizzare Database o Redis per cache e sessioni

Quando navighi su config/cache.php e config/session.php, vedi che i file CACHE_DRIVER e SESSION_DRIVER = predefiniti. Se hai installato Redis, prova semplicemente a impostarlo come driver di cache e sessione. Controlla se Redis è installato eseguendo:

redis-cli

Se è installato, prova a definire i driver nel tuo file .env:

CACHE_DRIVER=redis SESSIONE_DRIVER=redis

🤓😎 Sempre più persone stanno ricevendo i nostri consigli su Geek, Privacy, Sviluppo e Stile di Vita

Vuoi ricevere gli ultimi blog su Geek, Privacy, Sviluppo e Lifestyle? Iscriviti alla nostra newsletter.

2. Utilizzare diversi comandi predefiniti artigianali

Ci sono vari comandi artigianali che sono fatti per mettere in cache diverse parti di Laravel. Puoi configurarli nel processo di distribuzione di Laravel Forge o Envoyer:

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

 

Utilizzare le linee guida degli strumenti per sviluppatori

Fai un giro su https://developers.google.com/web/fundamentals/performance/ e ottimizza diversi passaggi:

3. Ottimizza le immagini come PNG e JPEG

Le immagini a volte contengono dati extra inutili che possono essere ottimizzati senza perdita di dati. Pertanto puoi usare i pacchetti OptipPNG E JPEGOttimizzatoIn Ubuntu installa OptiPNG:

sudo apt-get update sudo apt-get install optipng

E installa anche JPEGOptim:

sudo apt-get install jpegoptim

Ora vai alla cartella di cui vuoi ottimizzare le immagini. Per optipng esegui:

optando *

Per eseguire jpegoptim:

per i in *.jpg; fai jpegoptim --all-progressive "$i"; fatto

Si noti che anche le sottodirectory potrebbero essere ottimizzate

4. Utilizzare HTTP2 invece di HTTP 1.1 se è abilitato un certificato SSL

La seguente guida ti aiuta a: il processo di aggiornamento a HTTP2 in Nginx.

Nota che devi avere un certificato SSL. Google PageSpeed ha cambiato la velocità del server da 0,52s (senza HTTP2, con SSL) a 0,35s (con HTTP2)

Risultato: aumento della velocità di circa 30%

5. Risposta nella cache in Redis o File

A volte non è necessario che la pagina venga chiamata da un database più volte. Il semplice fatto di mettere in cache la pagina riduce parecchio il carico. È esattamente la stessa idea di Plug-in Cache di risposta Laravel. Le istruzioni di installazione sono piuttosto buone. Nel mio caso ha avuto un drastico miglioramento delle prestazioni.

Risultato: circa 200 ms di aumento della velocità nel mio caso

6. Ottimizzare InnoDB innodb_buffer_pool_size

Non so perché, ma per qualche motivo InnoDB ha un innodb_buffer_pool_size davvero piccolo quando distribuisci il tuo server Laravel Forge iniziale. Nel mio caso predefinito, innodb_buffer_pool_size era di 8 MB, mentre alcuni blog stimano che puoi riservare fino a 80% della tua RAM per innodb_buffer_pool_sizeQuindi modifica il file my.conf:

sudo nano /etc/mysql/my.cnf

E aggiungi ad esempio:

dimensione_innodb_buffer_pool = 1G

Risultato: query molto più veloci

7. Ridurre il carico aggiungendo swap

Il mio server aveva regolarmente problemi di memoria piena e carichi elevati con Redis. Questo è stato risolto aggiungendo un po' di swap a Ubuntu. Come descritto da DigitalOcean:

Uno dei modi più semplici per aumentare la reattività del tuo server e proteggerti dagli errori di memoria esaurita nelle tue applicazioni è aggiungere un po' di spazio di swap. Lo swap è un'area su un disco rigido che è stata designata come luogo in cui il sistema operativo può archiviare temporaneamente i dati che non può più contenere nella RAM.

Per saperne di più sull'aggiunta dello swap, visita Sito web DigitalOcean.

Risultato: una riduzione del carico quando si immette il comando 'top'

8. Utilizzo del caricamento rapido anziché del caricamento lento

Quando si usano modelli Laravel Eloquent con relazioni, è allettante usare il "lazy loading". Questo è un modo per ottenere modelli relazionali in un loop. Ad esempio:

commenti->nome; }

In questo modo, per ogni blog i commenti saranno caricati in query separate. Quando si usa il caricamento Eager, i commenti saranno caricati in una query ONE IN:

get(); foreach ($blogs come $blog) { echo $blog->commenti->nome; }

Per saperne di più su Eager Loading su Documentazione di Laravel.

Come trovare le query che potrebbero necessitare di ottimizzazione?

Non sai come trovare le query che potrebbero aver bisogno di ottimizzazione? Ad esempio, che potrebbero aver bisogno di caricamento veloce anziché caricamento lento? Il modo più semplice è installare e abilitare Barra di debug di Laravel sul tuo server di sviluppo. Con questa barra degli strumenti puoi visualizzare le query per pagina. Se vedi molte query che avrebbero potuto essere semplificate con un semplice join o in-query, sai che è la tua coda per ottimizzare quello script con caricamento veloce.

Risultato: ogni query salvata, un paio di millisecondi per query

Questa lista è ancora una lista work in progress, anche se i suggerimenti di cui sopra mi hanno dato un miglioramento della velocità di OLTRE 1 SECONDO. Avete suggerimenti, fatemelo sapere nei commenti!

Condividi anche i tuoi miglioramenti di velocità 🙂

Ultimo aggiornamento il 23 luglio 2018

5 commenti su “Laravel Speed and Performance Optimization 101 – The Guideline”

  1. Grazie, è molto informativo e utile.

    Lì ho trovato un bel refuso:
    R7. edurre ….
    Suppongo che dovrebbe essere
    7. Ridurre ….

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItaliano
Scorri verso l'alto