Optimizarea performanței Magento explicată

Publicat: 2022-03-11

Performanța Magento este de o importanță capitală. Viteza de încărcare are un impact direct și măsurabil asupra ratei de conversie a site-ului dvs., prin urmare, a avea o instalare optimizată a Magento este crucială pentru succesul magazinului dvs. Magento și, eventual, chiar și pentru afacerea dvs. în general.

În acest articol, voi prezenta câteva moduri prin care dezvoltatorii Magento își pot optimiza instalarea Magento 2 și voi explica cum să facă următoarele:

  • Verificați modulele terță parte și găsiți blocajele
  • Activați memoria cache pentru întreaga pagină
  • Lac, nu fișiere pentru cache pe toată pagina
  • Asigurați-vă că memoria cache a paginii întregi funcționează, poate fi spartă atât de ușor
  • Activați modul de producție
  • Minificare CSS/JS
  • Activați mese plate
  • Obțineți cea mai rapidă găzduire pe care o puteți permite
  • Optimizați imaginile
  • Indexatori pentru „Actualizare la program”
  • compresie GZIP
  • Utilizați Elasticsearch pe paginile de catalog și căutați.
  • Verificați dacă există apeluri Ajax inutile înapoi la server după încărcarea paginii (poate cauza blocarea sesiunii)
  • Redis pentru memoria cache a paginii și stocarea sesiunii

Verificați modulele terță parte și găsiți blocaje

Există multe module Magento de la terțe părți cu cod prost, folosind metode depreciate sau care au probleme de compatibilitate cu cea mai recentă versiune stabilă a Magento. Cea mai bună modalitate de a identifica solicitările grele este utilizarea unui profiler. Acest lucru vă ajută să identificați câte interogări MySQL aveți pe o pagină și câte sunt identice. Știind asta, puteți compacta acele interogări într-una singură și, astfel, puteți accelera Magento.

Unul dintre principalele lucruri pe care dezvoltatorii juniori le fac greșit în Magento este să încarce modele în bucle. Încercați să evitați asta cât de mult puteți. Încărcați întreaga colecție cu tot ce aveți nevoie și apoi parcurgeți-o. Ține întotdeauna cont de complexitatea timpului și spațiului și construiește-ți algoritmul într-un mod optimizat.

Diagrama de performanță Magento

Uitați-vă cum este încărcat aspectul dvs. și care sunt blocurile șablon care funcționează cel mai încet, apoi căutați codul respectiv. Uitați-vă la valorile Model CRUD unde puteți găsi date pertinente, cum ar fi încărcarea apelurilor în bucle.

Cache Magento pentru întreaga pagină

Când un utilizator accesează magazinul dvs., se face o solicitare către server. Această solicitare este procesată de PHP efectuând operațiuni specifice și interogări în baza de date, apoi returnând HTML-ul corespunzător pentru a fi afișat utilizatorului. Cache-ul de pagină completă stochează acel răspuns HTML, astfel încât următoarea solicitare identică o va returna direct, sărind peste toate procesarea back-end și interogările bazei de date. Acest lucru face ca răspunsul site-ului web să fie mult mai rapid.

Folosirea memoriei cache a întregii pagini ca parte a eforturilor dvs. de optimizare Magento poate crește enorm viteza site-ului dvs. Acest lucru va crea versiuni stocate în cache ale paginilor dvs. și le va livra utilizatorului în loc să ruleze toate interogările pentru fiecare solicitare. Desigur, nu toate paginile sunt stocate în cache. De exemplu, pagina coșului nu va fi stocată în cache, altfel, toți utilizatorii vor vedea prima versiune stocată în cache a paginii. Acestea sunt pagini dinamice sau secțiuni de pagini care sunt specifice utilizatorului și sesiunii.

Pentru a activa memoria cache a paginii întregi Magento, puteți rula următoarea comandă CLI:

php bin/magento cache:enable full_page

Pentru a activa tipurile de cache, puteți rula comanda CLI:

php bin/magento cache:enable

Puteți face acest lucru și din Magento Admin, conectându-vă ca administrator:

  1. Accesați Sistem > Instrumente > Gestionare cache
  2. Selectați tipul de cache pe care doriți să îl activați
  3. În meniul derulant Acțiuni , selectați Activare și faceți clic pe Trimitere

Captură de ecran de optimizare a performanței Magento

Utilizați Varnish pentru cache pe pagină completă

Când activați memoria cache pentru întreaga pagină, utilizați Varnish pentru a o gestiona, nu fișierele. Magento recomandă insistent utilizarea Varnish (sau Redis) în producție. Memorarea în cache integrată a paginii întregi (fie către sistemul de fișiere, fie către baza de date) este mult mai lentă decât Varnish, iar Varnish este conceput pentru a accelera traficul HTTP.

Puteți găsi un ghid complet despre cum să instalați și să configurați Varnish în documentația oficială Magento 2.

Pentru a configura Magento să utilizeze Varnish, conectați-vă la administratorul Magento ca administrator:

  1. Accesați Magazine > Configurare > Avansat > Sistem > Cache completă
  2. Din lista Aplicații de cache , faceți clic pe Varnish Caching
  3. Introduceți o valoare în câmpul TTL pentru conținut public
  4. Extindeți configurația Varnish și introduceți informațiile specifice despre configurația dvs. Varnish

Captură de ecran pentru optimizarea performanței Magento în memoria cache a paginii întregi

Asigurați-vă că memoria cache a paginii întregi funcționează: se sparge cu ușurință

Cache-ul întregii pagini poate fi spart cu ușurință în Magento 2. De exemplu, dacă doriți să excludeți un bloc din cache, nu utilizați atributul cacheable="false" în aspectul XML atunci când vă declarați blocul. Aceasta va dezactiva memoria cache pentru întreaga pagină care conține acel bloc, nu numai pentru acel bloc. Este o greșeală pe care am văzut-o pe oameni.

Căutați atributul cacheable="false" în machetele dvs. și vedeți pe ce blocuri sunt setate și pe ce pagini sunt numite acele blocuri. Astfel, puteți identifica dacă paginile banale au probleme cu memoria cache.

De asemenea, puteți testa dacă pagina dvs. este sau nu memorată în cache manual. Puneți magazinul în modul dezvoltator în mediul dvs. local sau scenic:

  1. Ștergeți memoria cache Magento
  2. Încărcați pagina în browser
  3. Inspectați anteturile paginii din fila de rețea de depanare a browserului dvs.
  4. Căutați X-Magento-Cache-Debug: MISS
  5. Actualizează pagina, ar trebui să se schimbe în HIT

Dacă nu se schimbă în HIT, înseamnă că pagina nu este stocată în cache și cache-ul nu funcționează.

Nu uitați să activați modul de producție

Magento are trei moduri de rulare, implicit , dezvoltator și producție .

Modul de producție este destinat implementării pe un sistem de producție. Acest mod ascunde excepțiile, servește fișierele statice numai din cache și nu vă permite să activați sau să dezactivați tipurile de cache în Magento Admin. De asemenea, previne compilarea automată a fișierelor de cod.

În timpul lucrului și dezvoltării magazinului, modul dezvoltator este activ. Nu uitați să treceți în modul producție atunci când vă implementați site-ul pe serverul live!

Comanda CLI pentru a vedea modul curent este:

php bin/magento deploy:mode:show

Comanda CLI pentru a comuta în modul producție este:

php bin/magento deploy:mode:set production

Comanda CLI pentru a comuta la modul dezvoltator este:

php bin/magento deploy:mode:set developer

Puteți găsi informații mai detaliate despre diferite moduri Magento aici.

Minificare CSS/JS

Minimizarea fișierelor CSS și JS este un element important al optimizării vitezei Magento 2. Prin reducerea acestora, eliminăm toate spațiile, filele și liniile noi din fișiere. Fișierele rezultate vor avea mai puține caractere și, prin urmare, o dimensiune mai mică, astfel încât se vor descărca mai repede.

Magento are această caracteristică încorporată și puteți activa minimizarea CSS/JS în Admin. Pentru a activa minimizarea JavaScript, urmați acești pași:

  1. pune Magento în modul producție
  2. Accesați Magazine > Configurare > Avansat > Dezvoltator
  3. Setați opțiunea Minimizare fișiere Javascript la Da
  4. Salvați configurația
  5. Goliți cache la pagina Sistem > Gestionare cache

Captură de ecran în modul de producție Magento

Pentru a activa minimizarea CSS, sunt necesari următorii pași:

  1. pune Magento în modul producție
  2. Accesați Magazine > Configurare > Avansat > Dezvoltator > Setări CSS
  3. Setați opțiunea Minify CSS Files la Da
  4. Salvați configurația
  5. Goliți cache la pagina Sistem > Gestionare cache

Captură de ecran pentru minimizarea CSS Magento

Notă: Nu îmbinați fișierele JS, ci doar reduceți-le .

Activați mese plate

Magento folosește modelul EAV (entity attribute value) care stochează atributele entităților sale în mai multe tabele, în funcție de tipul valorii acestora. Utilizarea mai multor tabele, alăturari și solicitări pe mai multe tabele sunt necesare pentru a prelua datele, ceea ce poate încetini interogările.

Magento are opțiunea de a folosi mese plate pentru catalog și produse. Tabelele plate sunt create prin îmbinarea tuturor atributelor unei entități într-un singur tabel. Când solicităm datele, trebuie să interogăm un tabel, făcându-l mult mai rapid.

Magento generează și actualizează tabele plate pentru fiecare indexare. Puteți activa mesele plate conectându-vă la Magento Admin ca administrator:

  1. Accesați Magazine > Configurare > Catalog > Catalog > Vitrină
  2. Selectați Da pentru Utilizare categorie de catalog plat
  3. Selectați Da pentru Folosire produs catalog plat
  4. Salvați configurația

Captură de ecran pentru mese plate Magento

Alegeți Fast Magento Hosting

Verificați cerințele minime Magento și vedeți dacă serverul dvs. le îndeplinește. Puteți vedea cerințele oficiale ale stivei de tehnologie Magento 2.2.x aici.

Configurația de găzduire este foarte importantă pentru performanța Magento 2. Există, de asemenea, servicii de găzduire dedicate pentru Magento, deși acestea pot fi mai mult despre marketing decât despre orice altceva.

Concluzie: obțineți cea mai rapidă soluție de găzduire pe care o puteți permite, cu excepția cazului în care este exagerată pentru proiectul dvs.

Optimizarea imaginii Magento

Mărimea imaginilor tale influențează în mod evident viteza site-ului tău web. De exemplu, dacă aveți o pagină de catalog cu 20 de produse și fiecare imagine a produsului are o dimensiune de 1 Mb, înseamnă că se descarcă un total de 20 Mb atunci când pagina se încarcă și, evident, aceasta ar putea fi o problemă în unele scenarii (dispozitive mobile, lățime de bandă limitată în anumite regiuni etc.).

Verificați dacă imaginile dvs. sunt optimizate corespunzător și dacă au un raport bun între calitate și dimensiune. De asemenea, asigurați-vă că imaginile dvs. nu sunt redimensionate prin CSS, ci că fișierul sursă este redimensionat la dimensiunea specifică de care aveți nevoie.

O altă tehnică este să folosiți încărcarea leneră, ceea ce înseamnă să vă încărcați imaginile după ce pagina a fost încărcată complet sau în timp ce utilizatorul defilează prin catalog.

De asemenea, puteți utiliza AWS sau un CDN pentru a vă livra conținutul mult mai rapid. Să aruncăm o privire rapidă asupra diferențelor dintre AWS, CDN și găzduirea tradițională din perspectiva optimizării bitmap.

Gazduire traditionala

Modul tradițional este de a stoca conținutul dvs., cum ar fi imagini, pe același server ca site-ul dvs. web. Acest lucru poate ocupa spațiu pe disc și o bună parte din lățimea de bandă, creând o încărcare substanțială a serverului. Evident, scalarea cu găzduirea tradițională poate fi o problemă.

CDN (Rețea de livrare de conținut)

O rețea de livrare a conținutului este de obicei utilizată pentru a reduce încărcarea unui server prin difuzarea unei părți din conținutul site-ului web. În plus, oferă performanțe ridicate prin livrarea rapidă a conținutului și disponibilitate ridicată prin utilizarea mai multor rețele la care să apelați.

AWS (Amazon CloudFront)

Amazon CloudFront este o rețea de livrare de conținut (CDN) foarte sigură, care oferă atât protecție la nivel de rețea, cât și la nivel de aplicație. Consultați acest tutorial despre cum să începeți cu AWS și să livrați conținut mai rapid.

În plus, puteți utiliza AWS pentru a redimensiona imaginile din mers pe baza dimensiunilor transmise printr-un parametru de interogare. Pentru informații suplimentare, consultați acest tutorial despre Redimensionarea imaginilor cu Amazon CloudFront și Lambda@Edge.

Setați indexatoarele la „Actualizare la programare”

Indexatoarele Magento pot fi setate pe două moduri: „ Actualizare la salvare ” sau „ Actualizare la programare ”.

Când sunt setate la „Actualizare la salvare” de fiecare dată când salvați un produs, un atribut sau o categorie, indexul specific începe să ruleze. Indexatoarele pot deveni consumatoare de resurse și asta ar putea încetini serverul.

Cel mai bun mod pentru a seta indexatoarele este „Actualizare la programare”. În acest fel, sunteți sigur că acestea sunt executate de job-ul cron la un moment specific pe care îl setați. Alegeți un moment în care traficul de pe site-ul dvs. web este scăzut.

Puteți vizualiza modul curent de indexare rulând comanda:

php bin/magento indexer:show-mode

Sau în Magento Admin accesând:

Sistem > Gestionare index

Puteți schimba modul de indexare la „Actualizare la programare” executând comanda:

php bin/magento indexer:set-mode schedule

Puteți schimba modul de indexare la „Actualizare la salvare” executând comanda:

php bin/magento indexer:set-mode realtime

Și iată-l în Magento Admin:

Sistem > Gestionare index: Selectați toate indexatoarele și din meniul drop-down Acțiuni selectați „Actualizare la programare”

text alt imagine

De asemenea, configurați sarcinile programate accesând Admin la:

Magazin > Setări > Configurare > Avansat > Sistem > Cron (sarcini programate)

Extindeți „Opțiuni de configurare Cron pentru grup: index”

Dialog de configurare cron Magento

Compresie GZIP

Gzip este o metodă de comprimare a fișierelor pentru transferuri de rețea mai rapide. Comprimarea permite serverului dvs. web să ofere fișiere de dimensiuni mai mici, care se încarcă mai repede pentru utilizatorii site-ului dvs. Cu toate acestea, acest lucru are un cost.

În timp ce comprimați un fișier, încărcați procesorul și cu cât comprimați mai mult un fișier, cu atât procesul durează mai mult. Chiar dacă acest lucru poate crește sarcina procesorului serverului, ar putea, de asemenea, să scadă substanțial utilizarea lățimii de bandă. Cu gzip, puteți alege între diferite niveluri de compresie, de la 1 la 9.

La nivelul 1 ai cel mai rapid timp de compresie, dar un raport de compresie mai mic. Pe partea opusă, la nivelul 9 ai cea mai mare rată de compresie, dar o viteză mai mică. Configurația implicită a gzip folosește nivelul 6, favorizând compresia în detrimentul vitezei. Nginx folosește totuși nivelul 1, favorizând viteza față de dimensiunea fișierului.

Pentru a activa compresia gzip și a activa modulul mod_deflate al Apache, puteți adăuga acest lucru actualizând fișierul .htaccess și decomentați liniile corespunzătoare, așa cum se arată mai jos. Modulul mod_deflate comprimă resursele statice în fișiere mai mici înainte de a le transfera în browser.

 <IfModule mod_deflate.c> ############################################ ## enable apache served files compression ## http://developer.yahoo.com/performance/rules.html#gzip # Insert filter on all content SetOutputFilter DEFLATE # Insert filter on selected content types only AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json image/svg+xml # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </IfModule>

Utilizați Elasticsearch în paginile de catalog și căutare

O altă modalitate prin care puteți crește viteza site-ului dvs. este prin utilizarea Elasticsearch pentru paginile de catalog și rezultatele căutării. Configurați-vă serverul Elasticsearch și conectați-vă magazinul Magento la acesta. Căutarea devine mult mai rapidă prin utilizarea Elasticsearch.

Acest ghid oficial explică cum puteți configura Magento cu Elasticsearch.

Pentru a configura Magento să utilizeze Elasticsearch, conectați-vă la Magento Admin ca administrator:

  1. Faceți clic pe Magazine > Setări > Configurare > Catalog > Catalog > Căutare catalog .
  2. Din lista Motor de căutare , faceți clic pe Elasticsearch sau Elasticsearch 5.0+ , după cum arată figura următoare. (Opțiunea Elasticsearch 5.0+ nu este disponibilă pentru Magento 2.1.)

Configurarea Elasticsearch în Magento

Verificați dacă există apeluri Ajax inutile

Apelurile înapoi la server după încărcarea paginii pot cauza blocarea sesiunii. O modalitate de a verifica toate apelurile Ajax pe care le face pagina ta este folosind DevTools în Chrome. Îl puteți deschide făcând clic dreapta pe pagină și selectând Inspectați.

Accesați fila de rețea și acolo puteți filtra solicitarea după XHR. Acum puteți vedea toate solicitările Ajax ale paginii și le puteți verifica pentru a vedea care dintre ele sunt necesare pe pagina respectivă.

Apeluri Ajax în Magento

Redis pentru memoria cache a paginii și stocarea sesiunii

Redis este o soluție de cache back-end opțională pentru a înlocui Zend_Cache_Backend_File , care este folosită implicit în Magento 2.

De ce să folosiți Redis?

Utilizarea Redis poate avea multiple avantaje:

  • Puteți înlocui memcached cu Redis, deoarece poate fi folosit și pentru stocarea sesiunii PHP.
  • Redis acceptă salvarea pe disc și replicarea master/slave, care este o caracteristică foarte solicitată care nu este acceptată de memcached. Replicarea evită un singur punct de eșec și oferă disponibilitate ridicată.
  • Operațiunile cu etichete nu necesită o scanare completă a fiecărui fișier cache, deoarece Redis funcționează prin indexarea etichetelor în fișiere.
  • Back-end-ul acceptă curățarea cache-ului bazată pe etichete fără bucle foreach.

Există, de asemenea, un dezavantaj principal:

  • Deoarece Redis este un magazin în memorie, toate datele dvs. trebuie să încapă în memorie, ceea ce înseamnă că sunt limitate doar de viteza și capacitatea RAM.

Configurați Magento să folosească Redis pentru stocarea sesiunii

Mai jos este un exemplu de configurație de adăugat la <your Magento install dir>app/etc/env.php :

 'session' => array ( 'save' => 'redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => '6379', 'password' => '', 'timeout' => '2.5', 'persistent_identifier' => '', 'database' => '2', 'compression_threshold' => '2048', 'compression_library' => 'gzip', 'log_level' => '1', 'max_concurrency' => '6', 'break_after_frontend' => '5', 'break_after_adminhtml' => '30', 'first_lifetime' => '600', 'bot_first_lifetime' => '60', 'bot_lifetime' => '7200', 'disable_locking' => '0', 'min_lifetime' => '60', 'max_lifetime' => '2592000' ) ),

Puteți verifica aici toate detaliile despre parametri și cum să faceți o verificare de bază că instalarea dvs. Redis funcționează bine împreună cu Magento.

Configurați Magento pentru a utiliza Redis pentru pagină și cache implicit

Există două moduri de a configura Redis pentru pagina și memoria cache implicită. Puteți edita manual fișierul <Magento install dir>app/etc/env.php sau puteți utiliza linia de comandă, care este metoda recomandată deoarece oferă și validare.

Pentru memoria cache implicită, rulați comanda:

php bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter_name>=<parameter_value>...

Specificați parametrii specifici pentru memorarea în cache implicită Redis.

Pentru cache-ul paginii, rulați comanda:

Php bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=redis.example.com --page-cache-redis-db=1

Această comandă permite stocarea în cache a paginii Redis, setează gazda la redis.example.com și atribuie numărul bazei de date la 1. Puteți verifica toate detaliile în Magento DevDocs.

Optimizarea performanței Magento Rezumat

Am acoperit destul de multe abordări ale optimizării performanței Magento 2, așa că haideți să facem o recapitulare rapidă.

Identificarea și rezolvarea blocajelor va face o diferență enormă în procesarea datelor dvs. Folosirea memoriei cache pe întreaga pagină și a Varnish va îmbunătăți, de asemenea, viteza site-ului dvs. și va accelera traficul HTTP. Ar trebui să utilizați întotdeauna Magento în modul producție pe serverul dvs. live, fără scuze. Utilizați minimizarea pentru a reduce dimensiunea fișierelor CSS și JS, un fișier mai mic se va descărca mai rapid și va utiliza mai puțină lățime de bandă.

Activați tabele plate pentru a reduce cererile de baze de date și pentru a îmbunătăți timpul de răspuns al bazei de date. Optimizați-vă imaginile și utilizați un CDN dacă este posibil. Setați indexatorii să se actualizeze în timp util și activați cronul Magento. Activarea compresiei gzip va reduce, de asemenea, dimensiunea fișierelor de descărcat. Utilizarea Elasticsearch va crește viteza paginilor de catalog și pagina cu rezultatele căutării se va încărca mult mai repede. Utilizați Redis pentru memoria cache a paginii și stocarea sesiunii, care este semnificativ mai rapidă decât memcache-ul implicit.

Puteți implementa toate aceste recomandări sau doar câteva pe care nu le-ați folosit până acum. Chiar și câteva ar trebui să fie suficiente pentru a îmbunătăți performanța Magento, care, sperăm, ar trebui să se transforme în mai multe conversii.