Pred časom smo aktivno delali na Magentu 2, kjer je bilo kar nekaj izzivov pri optimizaciji hitrosti :) Ne vem sicer koliko artiklov imate, kakšen workflow je zadaj, konfiguracija sistema ip... a vseeno spodaj nekaj izkušenj, ki bi vam morda lahko prišle prav:
1. Vklop Flat categories in Flat products
Ta opcija v bazi združi vse potrebne atribute v eno vrstico, kar občutno zmanjša poizvedbe za določen produkt.
Stores --> Catalog --> Storefront --> Use Flat catalog product/category
2. Združitev CSS in JS datotek
S tem se bo zmanjšalo število requestov za oba tipa datotek. CSS merge načeloma deluje brez težav, pri JS pa testirajte vse opcije in če vse funkcionalnosti na front-end delujejo normalno po tem, ko se vklopijo (bundle, merge, minify). Obstajale so težave z uporabo require.js.
Stores --> Configuration --> Advanced --> Developer -> CSS/Javascript settings
3. Vklop keširanja
Priporočljivo je vklopiti vse vrste keširanja, ki so na voljo v administraciji. Ob tem je priporočljivo čim manj refrešanja posameznega keša v kolikor ni nujno potrebno.
System - Cache management
4. Optimizacija teme
Če imate kupljeno temo oz. temo, ki ni v osnovnem paketu Magenta preverite ali je njena struktura pravilna, da ni podvajanj v templating strukturi (posebej xml layout) in kakšnih drugih anomalij, ki bi upočasnile stran (dodatne skripte v temi, ki bi lahko uporabljale Magento 2 framework ali UI, pa jih trenutno ne ali niso optimalno spisane ip...).
5. Optimizacija slik
V kolikor imate veliko vnosov produktov dnevno in s tem slik je dobro, da so optimizirane preden se naložijo v administracijo, ker optimizacija slik s strani platforme dodatno obremeni resorse strežnika. Izognite se uporabi PNG ali GIF formata v kolikor gre za produktno sliko.
6. Cache control in gzip
Na strani strežnika je dobro nastaviti cache control + gzip za vse tipe datotek, ki se servirajo na front-endu.
7. Administracija
Če se v času povečanega obiska na strani istočasno zelo intezivno uporablja administracija (vnos artiklov, konfiguracija ip...), se stran lahko zelo upočasni. V kolikor imate veliko dnevnih vnosov artiklov (ročno ali avtomatizirano) in večji dnevni obisk (10k+) je dobro, da se uporaba administracije omeji med časom povečanega obiska.
8. Deploy workflow
V kolikor delate modifikacije teme ali modulov priporočam, da delate deploy in nadgradnje izven časa, ko je obisk strani povečan. Najboljši čas je ponavadi v večernih urah :)
9. 3rd party moduli
Če imate inštalirane 3rd party module preverite, če pravilno delujejo in ne upočasnjujejo strani. Pri veliko modulih je CSS klican posamezno in ni narejen v skladu z Magento templatingom (less), kar doda dodatne requeste. Enako velja za js, če se ne uporablja require v kolikor je potrebno.
10. Nadgradnje sistema
Ta je seveda očitna - če je zadnja verzija stabilna, je vedno dobro nadgraditi - performance, security & feature wise :)
11. Uporaba Varnisha ali Redisa
Če imate možnost uporabite Varnish ali Redis, kar lahko občutno pohitri serviranje statičnih strani. Oba je ponavadi najbolje uporabiti na ločenem strežniku, ki bo namenjen samo za serviranje končne vsebine. Več v M2 dokumentaciji
Stores --> System --> Full Page cache
12. VPS ali dedicated server
Magento 2 na shared hostingu ni uporaben, zato je priporočljiv zmogljiv VPS ali dedicated, ki bo zmogel procesiranje/load. Optimalna konfiguracija (ram, proces., storage) je seveda odvisna od strani, velikosti baze, št. obiskovalcev ip...
13. CDN
Če je možno, je priporočljivo vzpostaviti CDN za serviranje statičnih datotek (js, css, ikone ip...). Tudi tukaj se lahko uporabi Varnish/Redis, bodisi na primary ali dodatnem strežniku.
14. PHP7
Magento 2 na php7 deluje bolje in hitreje. Poleg tega (kot je sonysony omenil) preveri php memory limit in mysql cache limit.
15. Dodatno
Pri heavy traffic trgovinah se lahko loči administracija, postavi load balancerje ip... A to je že bistveno večji podvig :)
Hitri test
Če želite na hitro testirati, kje je ozko grlo glede hitrosti lahko naredite naslednje:
- kopirajte trgovino na testno poddomeno
- izklopite vse 3rd party module (v kolikor obstajajo) in nastavite privzeto (blank) temo
- vklopite vse keše
- vključite flat
- na serverju omogčite gzip in cache control
- uporabite php7 (če je možno)
- v kolikor lahko, omogočite varnish
nato pa merite rezultate tako da primerjate live stran s testno med tem ko:
- vklopite vašo temo
- vklopite vsak 3rd party modul posebej
- vklopite ostale funkcionalnosti (flat, js/css merge in minify, gzip, cache...)
Tako boste dobili povratne podatke glede potrebnih korakov za optimizacijo.
Upam, da bo zgoraj napisano kaj pomagalo.
Priporočam, da vse našteto delate izključno na testni strani in temeljito testirate preden gre v živo, ker pri M2 gre lahko hitro kaj narobe :)