Vanlige Coding Problemer med Magento Platform av Deepa Ranganathan

Hvis du har blitt utviklings butikk etter butikk på Magento, ville du ha lagt merke til visse koding problemer. Sannsynligvis har du gått gjennom noen av disse problemene selv etter merke et dykk i utførelsen av butikken. Som nevnt er det flere koding problemer som påvirker ytelsen til butikken. Men, disse fem, som er nevnt her, er vanligvis ansvarlig for 84% av de ytelsesrelaterte problemer som påvirker din butikk. La oss snakke om hvordan de påvirker butikken, og hvordan de kan optimaliseres

Coding innenfor en Loop

Du vil innse at selv den minste feil som oppstår i en sløyfe er forstørret. Vanligvis sløyfer er de største ytelses bugs, spesielt de som gjentar SQL-spørringer eller redundante beregninger

La oss se hvordan ineffektivitet av redundante beregninger og SQL-spørringer i en sløyfe kan påvirke ytelsen din Magento butikken

Beregninger innenfor en Loop

Hvis du ønsker å beregne størrelsen på en array ved hjelp av en loop, én funksjon som du kan bruke er count ()

for ($ i = 0; $ i < telle ($ p); $ i ++)

{

//noen kode

}

Count (), utfører individuelt og beregner fort; det bremser ned bare når de anvendes i en sløyfe. Når du begynner å beregne størrelsen på en matrise med mye data og bruke telling for å levere produksjonen, vil du finne resultatene sakker umåtelig. Årsaken til at PHP ikke tilbyr sløyfe-invariant kode bevegelse automatisk.

Den beste måten å unngå dette ytelsesproblemet er å ringe funksjon utenfor løkken

$ rowNum = count ($ p);

for ($ i = 0; $ i

​​{

//noen kode

}

SQL spørringer innenfor en Loop


Som det beregner en SQL-spørring kan føre til ytelsesbaserte spørsmål;. når du kjører den i en loop, det er en mulighet for å bremse ned ditt nettsted Som oftest vil du se at Magento modeller er lagt i sløyfer

foreach ($ this- > getProductIds () som $ ProductID)

{$ produkt = Mage::getModel('catalog/product')->load($productId);

$this->processProduct($product);

}

An rekke produkt IDer er lastet for å behandle modellen. Som det kan sees EAV blir brukt til å utføre denne løkke som kan kreve at kjøre flere spørringer. I dette tilfellet er antallet av spørringer som blir eksekvert vil bli multiplisert med antall produkter, og resultatet er en langsom butikk som gir ut dårlig ytelse.

Den beste måten å optimalisere ville være å unngå å bruke produkter i en loop. Så, hva kan du gjøre? Bruk Magento data . kolleksjon som laster et sett av produkter lett Følgende er et eksempel på hvordan datainnsamling modeller samle produkter ved å skape en rekke forskjellige produkt Ids og holde legge de etterspurte produkter til sine felt

$ samling = Mage: : getResourceModel ('Katalog /product_collection')

-getProductIds ()))

-

foreach ($ samling som $ produkt)

{

$ this-

}

Når du flytter ut av sløyfene og inn i modellen innsamlingsmetode, vil du se at resultatene av butikken har faktisk forbedret. Husk alltid å holde en sjekk på minnet, slik at når du bruker datainnsamlings modeller, trenger du ikke laste inn data som er tyngre i forhold til størrelsen på minnet. Du må utføre masse sparing og sletting av spørringene innenfor modellene, slik som å opprettholde ytelsen til butikken.

Laster Modeller

Hele prosessen med å laste inn en modell inn i butikken din er egentlig ikke bufret, det er derfor hver gang du ringer lasten () -funksjonen er visse spørsmål kjøres i databasen, og dermed forårsaker ytelsesproblemer i butikken din

$ name = Mage :: getModel ('Katalog /produkt') -

$ sku = Mage :: getModel ('Katalog /produkt') -

$ attr = Mage :: getModel ('Katalog /produkt') -

Dette er et klassisk eksempel på hvordan spørsmål blir drevet på databasen hver gang en bestemt modell kalles

Den beste måten å takle dette problemet er å sikre at hver modell er lastet bare én gang

$ produkt = Mage :: getModel ('Katalog /produkt') -

$ name = $ produkt-

$ sku = $ produkt-

$ attr = $ produkt-

Noen ganger er du bare opptatt av produktet Id. På et slikt tidspunkt, betyr det ikke fornuftig å laste hele modellen. Med denne koden kan du enkelt laste produktet Id for et bestemt produkt

$ produkt = Mage :: getModel ('Katalog /produkt') -

$ res ['id'] = $ produkt-

En annen populær metode for å utlede produkt ID er å bruke den opprinnelige produktet metoden getIdBySku ()

$ res ['id'] = Mage :: getModel ('Katalog /produkt') -

Coding samlinger

annet område i Magento koding som gir problemer er samlinger. Samlinger er ganske effektiv, men som de jobber med et stort datasett, må du sørge for at du er koding dem med omhu, ellers vil du møte ytelsesproblemer

La oss se hvordan samlinger kan føre til koding problemer

Calling Redundant datasett

Du bruker vanligvis samlinger for å hente en enkelt element spesielt det første elementet på løkken første iterasjon. Så, hva kan være et problem her? Når du ikke har en begrensning på resultatene, vil løkken holde itera og gi ut alle elementene i samlingen i resultatet, i stedet for den opprinnelige første elementet. Det følgende er et eksempel på hvordan samlinger kan gi ut alle elementene

offentlig funksjon getRandomItem ()

{

$ samling = Mage :: getResourceModel ('mymodule /my_collection ') - > setRandomOrder ();

retur $ samling-> getFirstItem ();

}

Bruk av foreldelses

offentlig funksjon getRandomItem ()

{

$ samling = Mage :: getResourceModel ('mymodule /my_collection')

-

returnere $ samling-

}

Funksjonene $ samling-> setPageSize () og $ samling-> setCurPage () tilbudet begrense antall elementer som blir hentet fra samlingen

Du kan selv endre $ samling-


Forfatter Bio:

Deepa, en teknisk forfatter med Semafor Software, som nå vier sin tid i å gi råd sine kunder å leie Magento utviklere. Hun tilbyr informasjon samt tips og nyeste trendene i dette domenet. Hennes kjærlighet for lesing hjelper henne stadig gir oppdatert informasjon om ulike tekniske og design aspekter av Magento