Miglioramento delle prestazioni di Drupal 9 con moduli, migliori pratiche di codifica e la giusta configurazione del server
Pubblicato: 2020-08-11Potresti avere il server più potente con una quantità di memoria enorme, ma è sufficiente per garantire un sito Web ad alte prestazioni? Con Drupal, ridimensionare il sito web in armonia con la crescita del tuo business è facile. In effetti, questo è ciò in cui Drupal è eccezionale. Tuttavia, un improvviso aumento delle pagine web, delle funzionalità e dei contenuti potrebbe influire sulle sue prestazioni. Drupal 9 è qui ora ed è pronto per affrontare questa sfida come un professionista! Viene fornito con la bontà di Drupal 8 meno il vecchio codice che lo rende più snello, più pulito e più potente. Scopri di più sulle tecniche di miglioramento delle prestazioni di Drupal 9 che funzionano assolutamente.
Le prestazioni del sito web sono la chiave del successo aziendale. Il caricamento lento dei siti Web potrebbe essere dannoso per le aziende. Un sito Web con prestazioni migliori aiuta a migliorare la SEO, migliorare il tasso di conversione dei visitatori e offre una migliore esperienza utente ai visitatori che aiutano collettivamente nella crescita del business. Mentre i siti Web a caricamento lento fanno esattamente il contrario e diventano la ragione del fallimento aziendale.

Ci sono molte cose che influenzano le prestazioni del sito web. Alcuni di loro sono:
• Il tuo fornitore di servizi (hosting, DNS ecc.)
• Numero di richieste al server
• Problemi tecnici o cattive pratiche di programmazione
• Tecnica di memorizzazione nella cache
• Configurazione del server non corretta
• File di immagini e video pesanti
Drupal 9 Core e moduli personalizzati per aumentare le prestazioni
Ci sono molti moduli di base e contributi disponibili in Drupal 9 che possono essere utili per migliorare le prestazioni del tuo sito web. Seguendo determinate pratiche di codifica e con una corretta configurazione del server, puoi migliorare drasticamente le prestazioni del sito.
Moduli principali
• Tubo grande
Il modulo Drupal Big Pipe rende le cose più veloci senza ulteriori configurazioni. Viene fornito con Drupal core. Migliora le prestazioni percepite del frontend utilizzando i metadati di cacheability e migliorando così la pipeline di rendering.
• Cache pagina dinamica interna
Questo modulo Drupal 9 aiuta a memorizzare nella cache il contenuto dinamico. È utile sia per gli utenti anonimi che per quelli autenticati. Questo modulo non è disponibile in Drupal 7. Le pagine richieste dagli utenti vengono memorizzate la prima volta che vengono richieste e possono poi essere riutilizzate quando la stessa pagina viene ulteriormente richiesta.
• Cache di pagine interne
Il modulo Internal Page Cache aiuta a memorizzare nella cache i dati per gli utenti anonimi. Questo modulo è disponibile nel core ed è abilitato per impostazione predefinita.
Percorso di configurazione: admin/config/development/performance
Qui puoi cancellare la cache, impostare l'età massima della cache del browser e del proxy e abilitare/disabilitare le impostazioni di aggregazione.

Moduli Contributi
- Aggregazione CSS/JS avanzata
Il modulo Advagg viene fornito con molti altri sottomoduli, come - - AdvAgg Cdn: aiuta a caricare le risorse (CSS/JS) da CDN pubblico
- AdvAgg Validatore CSS/JS: convalida file CSS e JS
- AdvAgg External Minifier: minimizza Javascript e/o CSS con un minifier della riga di comando.
- AdvAgg Minify CSS: aiuta a minimizzare i file css con minifier di terze parti
- AdvAgg Minify JS: aiuta a minimizzare i file js con mi di terze parti
- AdvAgg Modifier: consente di modificare l'array CSS e JS. (Potrebbe avere problemi di compatibilità)
- AdvAgg Vecchio potenziatore di compatibilità di Internet Explorer
Percorso di configurazione: /admin/config/development/performance/advagg
Questo modulo supporta anche tecniche di compressione dei file come gzip e brotli . Questo modulo aiuta a ridurre il numero di richieste http, migliorando così notevolmente le prestazioni del sito.
Blazy
Il modulo Drupal 9 Blazy fornisce un caricamento lento delle immagini per risparmiare larghezza di banda ed evitare frequenze di rimbalzo più elevate. Il caricamento lento è una tecnica che carica le immagini solo quando si trovano nell'area visibile all'utente. Questa tecnica multi-servizio consente di risparmiare tempo e dati.
Percorso di configurazione: /admin/config/media/blazy
Qui puoi abilitare/disabilitare Blazy, configurare l'effetto segnaposto e puoi anche impostare l'offset che determina quanto prima l'immagine sarà visibile all'utente.

Modulo Blazy
CDN
Il modulo Drupal 9 CDN aiuta nella facile integrazione di CDN nei siti web Drupal. Aiuta a servire contenuto statico dal server CDN per aumentare la velocità di consegna dei contenuti. Oltre a questo, questo modulo è anche facile da configurare.
Percorso di configurazione: /admin/config/services/cdn

Qui puoi abilitare/disabilitare il CDN, fornire l'URL di mappatura e selezionare/deselezionare la memorizzazione nella cache dei file per sempre.

Miglioramento delle prestazioni con le migliori pratiche di codifica
Utilizzo di isset() su array_key_exist()
isset() è significativamente più veloce di array_key_exist() . La differenza principale tra isset e array_key_exist è che array_key_exists ti dirà sicuramente se esiste una chiave in un array. Mentre isset restituirà true solo se la chiave/variabile esiste e non è nulla. Per ulteriori informazioni su questo, controlla qui per il confronto con i benchmark.
Utilizzo di entityQuery()
entitàQuery() dipende da un controller di archiviazione per gestire la creazione e l'esecuzione della query per l'archiviazione di entità appropriata. Questo ha il vantaggio che qualsiasi query eseguita tramite entityQuery() è indipendente dall'archiviazione . Quindi, se stai scrivendo un modulo contribuito o stai lavorando su un sito Web in cui potrebbe essere necessario passare a un'archiviazione di entità alternativa in futuro, tutte le tue query utilizzeranno in modo trasparente il nuovo backend di archiviazione senza alcuna modifica necessaria. entitàQuery() può essere utilizzato sia che tu stia scrivendo query a mano in codice personalizzato o tramite il backend di visualizzazioni entityQuery() .
Utilizzo del metodo loadMultiple() invece di eseguire il ciclo
Se hai 10 nid (id nodo) e lo stai scorrendo per caricare ogni nodo, stai effettuando 10 query al database. Durante l'utilizzo di loadMultiple() viene ridotto a una sola query di database.
memorizzazione nella cache
Usando l'API Cache in Drupal 9 puoi memorizzare nella cache il renderer, l'array di risposta o l'oggetto. In Drupal 9 sono disponibili tre metadati di memorizzazione nella cache di renderabilità.
- Tag cache
I tag Cache vengono utilizzati per memorizzare nella cache i dati quando dipendono da entità o configurazioni Drupal. La sintassi per questo è cache-item:identifier ad es. nodo:5, utente:3. - Contesto della cache
Sintassi:
• i periodi separano i genitori dai figli
• un contesto di cache con nome plurale indica che è possibile specificare un parametro; da usare: aggiungi i due punti
Esempio: user.roles, user.roles:anonymous, ecc. - Età massima della cache
Cache max-age viene utilizzato per memorizzare nella cache i dati sensibili al tempo.
Lavoratore in coda / Batch
Per elaborare grandi quantità di dati senza timeout php, è possibile utilizzare l'elaborazione batch o il lavoratore in coda. Gli elementi in coda di lavoro vengono eseguiti solo quando il cron viene eseguito e viene eseguito per un breve periodo di tempo. Esistono due tipi di operatori in coda: affidabili e inaffidabili. L'operatore di coda affidabile garantisce che l'elemento nella coda venga eseguito almeno una volta, mentre una coda inaffidabile può saltare gli elementi a causa di un errore di memoria o per altre interruzioni. L'elaborazione batch elabora gli articoli fino a quando tutti gli articoli non terminano nel batch condizionato in modo che non si verifichino errori durante l'elaborazione senza attendere l'esecuzione cron.
Miglioramento delle prestazioni con una migliore configurazione del server
Usare Nginx invece di Apache
Nginx e Apache, entrambi sono server web ampiamente utilizzati. Nginx ha un vantaggio su Apache nel benchmark delle prestazioni. È anche più veloce ed efficiente di Apache. Nginx è 2,5 volte più veloce di Apache secondo un test di riferimento che esegue fino a 1.000 connessioni simultanee.
HTTP/2.0 su HTTP/1.1
HTTP/2.0 supporta il multiplexing, a differenza di HTTP/1.1 che blocca altre risorse. Se non è possibile caricare una risorsa, HTTP/2.0 utilizza la connessione TCP per inviare più dati di flussi contemporaneamente. HTTP/2.0 utilizza tecniche di compressione dell'intestazione avanzate rispetto a HTTP/1.1
Configurazione Nginx per HTTP/2.0
server {
ascolta 443 ssl http2; //impostazioni http2
certificato_ssl server.crt;
ssl_certificate_key server.key;
}Elaborazione di contenuti compressi
La compressione delle risposte spesso riduce significativamente la dimensione dei dati trasmessi. Tuttavia, poiché la compressione avviene in fase di esecuzione, può anche aggiungere un notevole sovraccarico di elaborazione che può influire negativamente sulle prestazioni.
Configurazione di Nginx per servire contenuto compresso:
server {
gzip su;
gzip_static attivo;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied qualsiasi;
gzip_vary attivo;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
...
}MariaDB invece di MySQL
mariaDB ha migliorato la velocità rispetto a MySQL. Fornisce cache e indicizzazione più veloci rispetto a MySQL. In questo caso è quasi il 24% più veloce di MySql. Ci sono anche altre metriche chiave in cui mariaDB è migliore di MySQL. Quindi, MariaDb è preferito a MySQL in termini di prestazioni.
CDN
CDN è l'acronimo di Content Delivery Network. È un cluster di server sparsi in tutto il mondo (noti anche come punti di presenza o PoP), che lavorano insieme per fornire i contenuti più velocemente. CDN memorizza la versione cache del contenuto del sito e fornisce il contenuto dal server disponibile più vicino. Alcuni dei provider CDN più diffusi sono Cloudflare, Amazon cloudfront, Google cloud cdn ecc.
