Yhteinen Coding kysymykset Magento Platform Deepa Ranganathan

Jos olet kehittää tallentaa jälkeen tallentaa Magento, olisit huomannut tiettyjä koodaus kysymyksiä. Todennäköisesti, olet käynyt läpi joitakin näistä asioista itse huomattuaan sukelluksen suorituskykyä ihmettelemään. Kuten mainitsin, on olemassa useita koodaus asioita, jotka vaikuttavat suorituskykyyn ihmettelemään. Mutta nämä viisi, jotka on mainittu tässä, ovat yleensä vastuussa 84% suorituskykyyn liittyviä kysymyksiä, jotka vaikuttavat ihmettelemään. Puhutaanpa miten ne vaikuttavat tallentaa, ja miten ne voidaan optimoida

Coding sisällä Loop

Huomaat, että pienikin virhe, joka tapahtuu silmukka suurennetaan. Yleensä silmukat ovat suurin suorituskykyä vikoja, erityisesti ne, jotka toistavat SQL-kyselyjä tai tarpeeton laskelmat

Katsotaanpa kuinka tehottomuutta tarpeeton laskelmien ja SQL-kyselyjä sisällä silmukan voi vaikuttaa suorituskykyyn Magento myymälä

Laskelmat sisällä Loop

Jos haluat laskea koko matriisi silmukka, yksi toiminto, voit käyttää on määrä ()

($ i = 0; $ i < , count ($ rivit); $ i ++)

{

//koodia

}

Count (), erikseen suorittaa ja laskee nopeasti; se hidastaa vain käytettäessä sisällä silmukka. Kun käynnistät laskettaessa koko array paljon tietoa ja käyttää määrä toimittaa tuotos, löydät suorituskykyä hidastumassa valtavasti. Syynä on PHP ei tarjoa loop-invariant koodi liikkeen automaattisesti.

Paras tapa välttää tämä suorituskykyongelman on soittaa toiminto ulkopuolella silmukan

$ rowNum = count ($ rivit);

($ i = 0; $ i

​​{

//koodia

}

SQL tiedustelut sisällä Loop


Koska se on tietojenkäsittely SQL kyselyn voi johtaa suorituskykyyn perustuva asioita, kun suoritat sen sisällä silmukka, on mahdollisuus hidastaa sivuston. Useimmiten näet, että Magento mallit ladataan silmukoita

foreach ($ this- > getProductIds () kuin $ Kirjoita voimassa)

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

$this->processProduct($product);

}

An joukko tuotteen tunnuksia ladataan, jotta pystymme käsittelemään malliin. Kuten nähdään EAV käytetään suorittamaan tämän silmukan, joka saattaa edellyttää voit suorittaa useita kyselyitä. Tässä tapauksessa useita kyselyitä, joita toteutetaan kerrotaan kanssa tuotteiden, ja tuloksena on hidas myymälä, joka antaa ulos huono suorituskyky.

Paras tapa optimoida olisi välttää lastaus tuotteiden silmukka. Joten, mitä voit tehdä? Käytä Magento tiedot kokoelma, joka lataa joukko nopeasti. Seuraavassa on esimerkki siitä, miten tiedonkeruumalleja keräävät siinä luomalla joukko eri tuote tunnukset ja pitää lisäämällä pyydettyjä tuotteita niiden kentät

$ kokoelma = Mage: : getResourceModel ("luettelo /product_collection)

-getProductIds ()))

-

foreach ($ keruuseen $ tuote)

{

$ this-

}

Kun siirrät pois silmukoita ja malliin noutotavan, näet, että suorituskykyä myymälä on todellakin parantunut. Aina muistaa pitää tarkistaa muistiin, niin että käytettäessä tiedonkeruumalleja, et lisää tietoja, jotka ovat raskaampia verrattuna muistin kokoa. Sinun täytyy tehdä massa tallentaminen ja poistaminen sekä kyselyt sisällä malleja jotta suorituskyky säilyy ihmettelemään.

Ladataan mallit

Koko prosessi lastaus mallin myymälä ei oikeastaan välimuistissa, minkä vuoksi joka kerta soittaa kuorma () funktio, tietyt kyselyt ajetaan tietokannassa, mikä aiheuttaa suorituskykyongelmia ihmettelemään

$ name = Mage :: getModel ("luettelo /tuote ') -

$ SKU = Mage :: getModel ("luettelo /tuote ') -

$ attr = Mage :: getModel (" luettelo /tuote') -

Tämä on klassinen esimerkki siitä, miten kyselyt ajetaan tietokannasta aina tiettyä mallia kutsutaan

Paras tapa ratkaista tämä ongelma on varmistaa, että jokainen malli on ladattu vain kerran

$ tuote = Mage :: getModel ("luettelo /tuote ') -

$ name = $ tuote-

$ SKU = $ tuote-

$ attr = $ tuote-

Joskus olet vain huolissaan tuotteen tunnus. Tällaisena aikana, se ei ole järkevää ladata koko malli. Tällä koodilla voit helposti ladata tuote Id tietyn tuotteen

$ tuote = Mage :: getModel ("luettelo /tuote ') -

$ res [id] = $ tuote-

Toinen suosittu tapa saada tuotteen tunnus on käyttää natiivi tuotetta menetelmä getIdBySku ()

$ res [id] = Mage :: getModel ("luettelo /tuote ') -

Coding kokoelmat

muut alue Magento koodaus, joka tarjoaa kysymyksistä on kokoelmia. Kokoelmat ovat melko tehokkaita, mutta koska he työskentelevät valtava tietokokonaisuus, sinun täytyy varmistaa, että olet koodaus niitä huolellisesti, muuten kohtaat toimintaongelmia

Katsotaanpa kuinka kokoelmia voi aiheuttaa koodaus kysymyksiä

Calling Turhat aineistoja

yleensä käyttää kokoelmat hakea yksittäisen kohteen varsinkin ensimmäisenä kohtana silmukan ensimmäistä iterointia. Joten, mikä voisi olla kysymys? Kun et tarjoa rajoitusta tuloksista, silmukka pitää iteroimalla ja antaa pois kaikki erät kokoelma seurauksena alkuperäisten sijaan ensimmäinen kohde. Seuraavassa on esimerkki siitä, miten kokoelmia voi antaa pois kaikki kohteet

julkisessa tehtävässä getRandomItem ()

{

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

paluu $ Collection- > getFirstItem ();

}

Hakeminen rajoitus

julkista tehtävää getRandomItem ()

{

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

-

palauttaa $ Collection-

}

toiminnot $ Collection- > setPageSize () ja $ Collection- > setCurPage () tarjous määrän rajoittamiseksi kohteita, jotka haetaan kokoelma

Voit jopa muokata $ Collection-


Tekijä Bio:

Deepa, tekninen kirjoittaja kanssa Semaphore ohjelmisto, joka nyt omistautuu aikansa neuvoo asiakkaitaan palkata Magento kehittäjille. Hän tarjoaa tietoa sekä vinkkejä ja uusimpia suuntauksia tällä alalla. Hänen rakkautensa lukeminen auttaa häntä jatkuvasti tarjota uusinta tietoa eri teknisistä ja suunnittelun näkökohtia Magento