Îmbunătățirea performanței Drupal 9 cu module, cele mai bune practici de codare și configurația corectă a serverului

Publicat: 2020-08-11

Ai putea avea cel mai puternic server cu memorie în grămada, dar este suficient pentru a asigura un site web de înaltă performanță? Cu Drupal, scalarea site-ului web în armonie cu creșterea afacerii dvs. este ușoară. De fapt, la asta este grozav Drupal. Cu toate acestea, o creștere bruscă a paginilor web, a funcționalității și a conținutului ar putea afecta performanța acestuia. Drupal 9 este aici acum și este pregătit să accepte această provocare ca un profesionist! Vine cu bunătatea Drupal 8 minus vechiul cod care îl face mai slab, mai curat și mai puternic. Explorați mai multe despre tehnicile de îmbunătățire a performanței Drupal 9 care funcționează absolut.

Performanța site-ului web este cheia succesului în afaceri. Încărcarea lentă a site-urilor web ar putea fi dăunătoare pentru companii. Un site web cu performanțe mai bune ajută la un SEO mai bun, îmbunătățește rata de conversie a vizitatorilor și oferă vizitatorilor o experiență de utilizare mai bună, ceea ce contribuie în mod colectiv la creșterea afacerii. În timp ce site-urile web cu încărcare lentă fac exact opusul și devin motivul eșecului afacerii.

drupal-9-optimizare-performanță


Există multe lucruri care afectează performanța site-ului. Unii dintre ei sunt:

• Furnizorul dvs. de servicii (gazduire, DNS etc.)
• Numărul de solicitări către server
• Probleme tehnice sau practici proaste de programare
• Tehnica de stocare în cache
• Configurare necorespunzătoare a serverului
• Fișiere de imagine și video grele

Drupal 9 Core și module personalizate pentru a crește performanța

Există multe module contributive și de bază disponibile în Drupal 9, care pot fi utile în îmbunătățirea performanței site-ului dvs. web. Urmând anumite practici de codificare și cu configurarea corectă a serverului, puteți îmbunătăți drastic performanța site-ului.

Module de bază

• Pipa Mare

Modulul Drupal Big Pipe face lucrurile mai repede fără configurație suplimentară. Vine ambalat cu miez Drupal. Îmbunătățește performanța percepută de front-end prin utilizarea metadatelor de stocare în cache și, astfel, îmbunătățirea conductei de randare.

• Internal Dynamic Page Cache

Acest modul Drupal 9 ajută la stocarea în cache a conținutului dinamic. Este util atât pentru utilizatorii anonimi, cât și pentru utilizatorii autentificați. Acest modul nu este disponibil în Drupal 7. Paginile solicitate de utilizatori sunt stocate prima dată când sunt solicitate și pot fi apoi reutilizate atunci când aceeași pagină este solicitată în continuare.


• Internal Page Cache

Modulul Internal Page Cache ajută la stocarea în cache a datelor pentru utilizatori anonimi. Acest modul este disponibil în nucleu și este activat implicit.

Calea de configurare: admin/config/development/performance

Aici puteți șterge memoria cache, puteți seta vârsta maximă pentru browser și cache proxy și puteți activa/dezactiva setările de agregare.

Advagg-modul
Modulul cache al paginii interne

Module contribuite

  • Agregare CSS/JS avansată

    Modulul Advagg vine împachetat cu multe alte submodule, cum ar fi -
  • AdvAgg Cdn: Ajută la încărcarea activelor (CSS/JS) din CDN-ul public
  • AdvAgg CSS/JS Validator: validează fișierul CSS și JS
  • AdvAgg External Minifier: Minimizează Javascript și/sau CSS cu un micificator de linie de comandă.
  • AdvAgg Minify CSS: Ajută la diminuarea fișierelor CSS cu un minier terță parte
  • AdvAgg Minify JS: Ajută la reducerea fișierelor js cu mii terță parte
  • Modificator AdvAgg: Permite cuiva să modifice matricea CSS și JS. (Poate avea probleme de compatibilitate)
  • AdvAgg Old Internet Explorer Compatibility Enhancer

Calea de configurare: /admin/config/development/performance/advagg

Acest modul acceptă și tehnici de comprimare a fișierelor, cum ar fi gzip și brotli . Acest modul ajută la reducerea numărului de solicitări http, îmbunătățind astfel performanța site-ului în mod semnificativ.

  • Blazy

Modulul Drupal 9 Blazy oferă încărcare leneșă a imaginilor pentru a economisi lățimea de bandă și pentru a evita rate mai mari de respingere. Lazy loading este o tehnică care încarcă imagini numai atunci când se află în zona vizibilă pentru utilizator. Această tehnică multi-servire economisește timp și date.

Calea de configurare: /admin/config/media/blazy

Aici puteți activa/dezactiva Blazy, configura efectul de substituent și, de asemenea, puteți seta offset-ul care determină cât de devreme va fi vizibilă imaginea pentru utilizator.

Modul Blazy

Modul Blazy
  • CDN

Modulul Drupal 9 CDN ajută la integrarea ușoară a CDN-ului în site-urile web Drupal. Ajută la difuzarea conținutului static de pe serverul CDN pentru a crește viteza de livrare a conținutului. În afară de asta, acest modul este, de asemenea, ușor de configurat.

Calea de configurare: /admin/config/services/cdn

Modul CDN
Setări modul CDN

Aici puteți activa/dezactiva CDN-ul, puteți furniza adresa URL de mapare și puteți verifica/debifa pentru totdeauna stocarea în cache a fișierelor.

Îmbunătățirea performanței cu cele mai bune practici de codare

  • Folosind isset() peste array_key_exist()

Metoda isset() este semnificativ mai rapidă decât array_key_exist() . Principala diferență dintre isset și array_key_exist este că array_key_exists vă va spune cu siguranță dacă o cheie există într-o matrice. În timp ce isset va returna true numai dacă cheia/variabila există și nu este nulă. Pentru mai multe informații despre acest lucru, verificați aici pentru comparație de referință.

  • Folosind entityQuery()

entityQuery() depinde de un controler de stocare care se ocupă de construirea și executarea interogării pentru stocarea entității corespunzătoare. Acest lucru are avantajul că orice interogare rulată prin entityQuery() este independentă de stocare. Deci, dacă scrieți un modul contribuit sau lucrați pe un site web unde ar putea fi necesar să treceți la o entitate de stocare alternativă în viitor, toate interogările dvs. vor folosi în mod transparent noul backend de stocare, fără a fi necesare modificări. entityQuery() poate fi folosit indiferent dacă scrieți interogări manual în cod personalizat sau prin backend-ul entityQuery() Views.

  • Folosind metoda loadMultiple() în loc de buclă

Dacă aveți 10 nid-uri (ID-uri de nod) și treceți prin ele pentru a încărca fiecare nod, faceți 10 interogări la baza de date. În timpul utilizării loadMultiple() se reduce la o singură interogare de bază de date.

  • Memorarea în cache

Folosind API-ul Cache în Drupal 9, puteți stoca în cache redarea, matricea de răspuns sau obiectul. Există trei metadate de redare în cache disponibile în Drupal 9.

  1. Etichetele din cache

    Etichetele Cache sunt folosite pentru a stoca în cache datele atunci când acestea depind de entitățile sau configurațiile Drupal. Sintaxa pentru aceasta este cache-item:identifier de exemplu nodul:5, utilizator:3.
  2. Contextul cache

    Sintaxă:
    • perioadele separă părinții de copii
    • un context cache denumit plural indică faptul că un parametru poate fi specificat; a folosi: adăugați două puncte
    Exemplu: user.roles, user.roles:anonymous etc.
  3. Vârsta maximă a memoriei cache

Cache max-age este folosit pentru a stoca în cache datele sensibile la timp.

  • Lucrător la coadă / Lot

Pentru a procesa cantități mari de date fără time out php, pot fi folosite procesarea lotului sau lucrătorul în coadă. Lucrătorul de articole din coadă rulează numai atunci când cron rulează și rulează pentru o perioadă mică de timp. Există două tipuri de lucrători la coadă: fiabili și nesiguri. Lucrătorul de coadă de încredere se asigură că elementul din coadă rulează cel puțin o dată, în timp ce o coadă nesigură poate sări peste articole din cauza unei erori de memorie sau pentru alte întreruperi. Procesarea în lot procesează articolele până când toate articolele se termină în lot condiționat, astfel încât să nu apară erori în timpul procesării fără a aștepta rularea cron.

Îmbunătățirea performanței cu o configurare mai bună a serverului

  • Folosind Nginx în loc de Apache

Nginx și Apache, ambele sunt servere web utilizate pe scară largă. Nginx are un avantaj față de Apache la benchmark de performanță. De asemenea, este mai rapid și mai eficient decât apache. Nginx funcționează de 2,5 ori mai rapid decât Apache, conform unui test de referință care rulează până la 1.000 de conexiuni simultane.

  • HTTP/2.0 peste HTTP/1.1

HTTP/2.0 acceptă multiplexarea, adică spre deosebire de HTTP/1.1, care blochează alte resurse. Dacă o resursă nu poate fi încărcată, HTTP/2.0 utilizează conexiunea TCP pentru a trimite mai multe fluxuri de date simultan. HTTP/2.0 utilizează tehnici avansate de comprimare a antetului decât HTTP/1.1

 Configurație Nginx pentru HTTP/2.0
Server {
    asculta 443 ssl http2; //http2 setări
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}
  • Servirea de conținut comprimat

 Comprimarea răspunsurilor reduce adesea semnificativ dimensiunea datelor transmise. Cu toate acestea, deoarece compresia are loc în timpul execuției, poate adăuga, de asemenea, o suprasarcină considerabilă de procesare, care poate afecta negativ performanța. 
Configurație Nginx pentru a servi conținut comprimat:
Server {
    gzip on;
    gzip_static activat;    
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied orice;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_versiunea 1.1;    
    ...
}
  • MariaDB în loc de MySQL

mariaDB a îmbunătățit viteza în comparație cu MySQL. Oferă stocare în cache și indexare mai rapidă decât MySQL. Este cu aproape 24% mai rapid decât MySql în acest caz. Există și alte valori cheie în care mariaDB este mai bună decât MySQL. Deci, MariaDb este preferată față de MySQL în ceea ce privește performanța.

  • CDN

CDN înseamnă rețea de livrare de conținut. Este un grup de servere răspândite pe tot globul (aka, puncte de prezență sau PoP-uri), care lucrează împreună pentru a livra conținutul mai rapid. CDN stochează versiunea în cache a conținutului site-ului și livrează conținutul de pe cel mai apropiat server disponibil. Unii dintre furnizorii populari de CDN sunt Cloudflare, Amazon cloudfront, Google cloud cdn etc.