Stranka je pristopila do nas s hudimi težavami s hitrostjo svoje Magento spletne trgovine.

Spletno trgovino je postavil drugi izvajalec, ki ni poskrbel za kakovostno izdelavo, oziroma nima dovollj znanja z optimizacijo hitrosti delovanja aplikacije.

Potek dela:

Pridobili smo vse dostope bodisi do programske kode in podatkovne baze spletne trgovine. Trgovino smo postavili lokalno na lastna okolja, kjer smo lahko naredili analizo trenutnega stanja aplikacije.

Prvo kar smo ugotovili, da ima stranka že kar zastarelo verzijo Magento platforme. Včasih je preskok za veliko verzij kar zahteven postopek, sploh ker se velikokrat zahteva tudi nadgradnjo PHP verzije, ki vpliva tudi na preostale 3th party nameščene plugine. Z nekaj truda nam je na koncu uspelo izvesti tudi nadgradnjo Magento trgovine, nekaj nameščenih pluginov in PHP verzije.

S tem smo tudi poskrbeli za bistveno izboljšanje varnosti spletne trgovine.

Po končani nadgradni smo se lotili optimizacije hitrosti. Za reševanje performančnih težav spletnih aplikacij in Magento platforme uporabljamo BlackFire.io orodje. To orodje omogoča natančno profiliranje posameznega procesa (requesta), ki se izvede na spletno trgovino, bodisi čas izvajanja PHP kode in izvajanje poizvedb (querijev) na bazo.

S tem orodjem smo preverili vse glavne strani spletne trgovine in sicer naslovnico, stran kategorije, stran izdelka, košarico in checkout.

Na koncu smo izvedli še pregled kritičnih poizvedb / querijev, ki se izvajajo na bazi.

Naslovnica

Pri analizi naslovnice smo ugotovili, da je največje ozko grlo datoteka “mobilemenu.phtml”, ki sestavi mobilno navigacijo iz Magento kategorij in ročno definiranih povezav. Za pridobivanje kategorij iz Magenta se na podatkovno bazo izvedejo 3 identične poizvedbe, ki uporabijo left join na tabelo core_url_rewrite. Ta konkreten left join ne uporablja definiranih indexov, ampak naredi range scan celotne tabele, kar ni optimalno in zelo upočasni poizvedbo / query.

Prav tako se logika iz datoteke mobilemenu.phtml izvede vsakič ko se naloži stran, torej na vsak request se naloži blok ki upodobi template mobilemenu.phtml.

Torej ta blok ne uporablja predpomnilnika (“block cache”) čeprav bi ga lahko. Namreč v prikazu navigacije  (ime kategorije in URL), se kategorije ne tako pogosto spreminjajo, zato je hranjenje v predpomnilnik “block cache” kar zaželjeno. S tem, ko določen blok (.phtml) spravimo v “block cache”, se le ta izvede enkrat, nato se hrani v pomnilniku (redis) do nadaljnega. S tem so vsi nadaljni requesti bistveno hitrejši.

Z našo optimizacijo poizvedbe in uporabo predpomnilnika smo čas nalaganja naslovnice skrajšali za kar 98%.

TTFB (Time to first byte) naslovnice pred optimizacijo: 16 sek
TTFB po optimizaciji: 0.22 sek

Imate tudi vi težave s hitrostjo vaše trgovine?
Tudi vam lahko pomagamo optimizirati vašo Magento spletno trgovino!

Stran kategorije

Pri analizi izvajanja strani kategorije smo ugotovili, da je ravno tako problematična datoteka “mobilemenu.phtml”, ki se očitno izvaja na vseh straneh.

Že z predhodnjo optimizacijo te datoteke, smo na strani kategorije bistveno pohitrili delovanje.

Iz 15.8 sekund smo smo čas izvajanja kategorije pohitrili na 0.86 sekund.

Ozko grlo predstavlja tudi datoteka uaee.phtml, ki je del 3th party modula Tatvic_Uaee in se uporablja za pošiljanje različnih podatkov in dogodkov v orodje Google Analytics. Po podrobni analizi izvorne kode omenjene datoteke, smo našli glavni izvor performančnih težav in jih tudi odpravili.

S tem smo še dodatno zmanjšali čas nalaganja strani kategorije za dodatnih 0.4 sekunda.

Tako je bil TTFB po izvedeni optimizaciji strani kategorije pičlih 0.4 sekunde

Stran izdelka

Tudi tukaj je optimizacija datoteke “mobilemenu.phtml” bistveno pripomogla k času izvajanja strani izdelka. Pred začetkom optimizacije je stran izdelka potrebovala kar 26 sekund. Po optimizaciji datoteke “mobilemenu.phtml” pa se je čas izvajanja strani izdelka zmanjšal na 2.6 sekunde, ki sicer še vedno ni bilo dovolj.

Veliko ozko grlo pa predstavlja tudi stranska navigacija na strani izdelka. Namreč spletna trgovina ima tudi na strani izdelka v levem stolpcu prikazano celotno kategorizacijsko drevo. Za prikaz stranske navigacije se uporablja 3th party modul “Codnitive_Sidenav”, ki prav tako povzroča performančne težave.

V tem primeru žal zaradi načina delovanja ni bilo mogoče uporabiti predpomnilnika, smo pa v izvorni kodi našli komentar ki nakazuje na to, da se izvajalec modula zaveda težave, ampak zahteva nakup “Ultra” verzije modula za boljše delovanje.

Po podrobnejši analizi izvorne kode modula, smo kljub vsemu našli glavni vzrok počasnega delovanja in ga tudi uspešno odpravili. S tem smo skrajšali vsako nalaganje strani izdelka še za dodatni 2,5 sekunde. Tako je končni čas nalaganja strani izdelka 0.5 sekunde.

V primerjavi z začetnim stanjem smo čas nalaganja strani izdelka izboljšali za 97%.

Optimizacija poizvedb / querijev na podatkovno bazo

Pri analizi poizvedb smo zaznali konkretno poizvedbo, ki je bila glavni razlog za počasno delovanje strani. Po podrobnem pregledu smo ugotovili, da poizvedba/query ne uporablja indeksov, zato smo opravili optimizacijo, ki je čas querija skrajšala iz 5 sekund na 10 milisekund. Omenjena poizvedba se je na na vsaki strani izvedla 3 krat, kar pomeni da je bilo vsako nalaganje strani zaradi le-te upočasnjeno za okvirno 15 sekund.

Povzetek

 Pred optimizacijoPo optimizacijo% izboljšanja
Naslovnica18 sekund0.2 sekunde-98%
Stran kategorije19 sekund0.45 sekunde-97%
Stran izdelka26 sekund0.5 sekunde-97%
Košarica18 sekund0.4 sekunde-97%
Checkout18 sekund0.4 sekunde-97%

Obstoječa trgovina je imela velike performančne težave, saj je bilo začetno stanje znatno prepočasno, kot je standard za Magento trgovino.

Ravno tako je ta projekt vnovič pokazal, da je na tržišču veliko slabo narejenih 3th party pluginov, ki lahko znatno upočasnijo delovanje vaše spletne trgovine.

Vedno predlagamo zmerno uporabo 3th party pluginov in le tam kjer je res potrebno. Po namestitvi pa je potrebno še natančno preveriti in analizirati hitrost delovanja nameščenega plugina.

S tem projektom smo naročniku znatno pohitrili delovanje njegove spletne trgovine.Izvedli smo tudi posodobitev Magento platforme in s tem tudi bistveno izboljšali varnost spletne trgovine in njenih podatkov.

Če imate tudi vi težave s hitrostjo vaše spletne trgovine, vas vabimo da nas kontaktirate.

Imate tudi vi težave s hitrostjo vaše trgovine?
Tudi vam lahko pomagamo optimizirati vašo Magento spletno trgovino!

Elitek d.o.o.Prade C. XV/216000, KoperSlovenia, EU