Almindelige Kodning Problemer med Magento platform af Deepa Ranganathan

Hvis du har udviklet butik efter butik på Magento, ville du have bemærket visse kodning spørgsmål. Sandsynligvis, har du gået igennem nogle af disse spørgsmål selv efter bemærke et dyk i udførelsen af ​​din butik. Som nævnt er der flere kodning spørgsmål, der påvirker effektiviteten af ​​din butik. Men, disse fem, som er nævnt her, er typisk ansvarlige for 84% af ydeevnen relaterede spørgsmål, der påvirker din butik. Lad os tale om hvordan de påvirker butikken, og hvordan de kan optimeres

Kodning inden for en Loop

Du vil indse, at selv de mindste fejl, der opstår inden for en løkke forstørres. Generelt loops er de største præstationer bugs, især dem, der gentage SQL-forespørgsler eller redundante beregninger

Lad os se, hvordan ineffektivitet overflødige beregninger og SQL-forespørgsler inden for en løkke kan påvirke ydeevnen af ​​din Magento butik

Beregninger inden for en Loop

Hvis du ønsker at beregne størrelsen af ​​et array ved hjælp af en løkke, den ene funktion, som du kan bruge, er count ()

for ($ i = 0; $ i < tælle ($ rækker); $ i ++)

{

//noget kode

}

Count (), individuelt udfører og beregner hurtigt; det sinker kun, når de anvendes i en løkke. Når du begynder at beregne størrelsen af ​​et array med en masse data og bruge count til at levere output, finder du ydeevne bremse uhyre. Årsagen er PHP tilbyder ikke loop-invariant kode bevægelse automatisk.

Den bedste måde at undgå dette ydeevne problem er at kalde funktionen uden for løkken

$ rowNum = tæller ($ rækker);

for ($ i = 0; $ i

​​{

//noget kode

}

SQL-forespørgsler inden for en Loop


Som det er computing en SQL forespørgsel kan føre til resultater baseret spørgsmål. når du kører det i en løkke, er der en mulighed for at bremse din hjemmeside Oftest vil du se, at Magento modeller er lagt i løkker

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

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

$this->processProduct($product);

}

An vifte af produkt-id'er er lagt for at behandle modellen. Som det kan ses EAV bruges til at udføre denne løkke, som kan kræve, at du køre flere forespørgsler. I dette tilfælde er antallet af forespørgsler, der bliver henrettet, vil blive ganget med antallet af produkter, og resultatet er en langsom butik, der giver ud dårlige resultater.

Brug Magento data Den bedste måde at optimere ville være at undgå at indlæse produkterne i en løkke. Så hvad kan du gøre? . kollektion, som indlæser en række produkter nemt følgende er et eksempel på, hvordan dataindsamling modeller indsamler produkterne ved at skabe en bred vifte af de forskellige produkt Ids og holde tilføje de ønskede produkter til deres marker

$ kollektion = Mage: : getResourceModel ('katalog /product_collection «)

-getProductIds ()))

-

foreach ($ kollektion som $ produkt)

{

$ this-

}

Når du flytter ud af løkkerne og ind i modellen indsamlingsmetode, vil du se, at udførelsen af ​​butikken faktisk har forbedret. Husk altid at holde styr på hukommelsen, så når du bruger dataindsamling modeller, behøver du ikke indlæse data, der er tungere i forhold til hukommelsen størrelse. Du skal udføre masse opsparing og sletning af de forespørgsler inden modellerne således at opretholde effektiviteten af ​​din butik.

Henter Modeller

hele processen med at indlæse en model ind i din butik er egentlig ikke cachet, hvilket er grunden til, hver gang du kalder belastningen () funktion er visse forespørgsler køres i databasen, hvilket førte problemer med ydeevnen i din butik

$ name = Mage :: getModel ('katalog /vare «) -

$ sku = Mage :: getModel ('katalog /vare ") -

$ attr = Mage :: getModel (' katalog /vare") -

Denne er et klassisk eksempel på, hvordan forespørgsler køres i databasen, hver gang en bestemt model kaldes

Den bedste måde at løse dette problem er at sikre, at hver model er indlæst én gang

$ produkt = Mage :: getModel ('katalog /vare ") -

$ navn = $ produkt-

$ sku = $ produkt-

$ attr = $ produkt-

Nogle gange er du kun beskæftiger sig med det produkt, Id. På et sådant tidspunkt, giver det ikke mening at indlæse hele modellen. Med denne kode kan du nemt lægge produktet Id for et bestemt produkt

$ produkt = Mage :: getModel ('katalog /vare ") -

$ res [' id '] = $ produkt-

En anden populær metode til at udlede produkt-id er at bruge den indfødte produkt metoden getIdBySku ()

$ res ['id'] = Mage :: getModel ('katalog /vare «) -

Kodning Samlinger

andet område i Magento kodning, der tilbyder spørgsmål er samlinger. Samlinger er temmelig effektiv, men som de arbejder med en enorm datasæt, skal du sikre, at du kodning dem med omhu, ellers vil du stå problemer med ydeevnen

Lad os se, hvordan samlinger kan forårsage kodning problemer

Opkald Redundant data Indstiller

Du normalt bruger samlinger til at hente et enkelt element, især det første punkt på løkken første iteration. Så hvad kunne være et problem her? Når du ikke tilbyder en begrænsning på resultaterne, vil løkken holde iteration og give alle de punkter i samlingen i resultatet, i stedet for den oprindelige første punkt. Det følgende er et eksempel på, hvordan samlinger kan give alle de elementer

offentlig funktion getRandomItem ()

{

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

retur $ Collection- > getFirstItem ();

}

Anvendelse begrænsning

offentlig funktion getRandomItem ()

{

$ kollektion = Mage :: getResourceModel ('mymodule /my_collection «)

-

returnere $ Collection-

}

Funktionerne $ Collection- > setPageSize () og $ Collection- > setCurPage () tilbyde begrænse antallet af elementer, der hentes fra samlingen

Du kan endda ændre $ Collection-


Author Bio:

Deepa, en teknisk forfatter med Semaphore Software, som nu vier sin tid i at rådgive sine kunder til at ansætte Magento udviklere. Hun tilbyder information samt tips og nyeste tendenser på dette område. Hendes kærlighed til læsning hjælper hende konstant give seneste oplysninger om forskellige tekniske og designmæssige aspekter af Magento