Problemi di codifica comuni con Magento piattaforma di Deepa Ranganathan

Se siete stati in via di sviluppo negozio dopo negozio Magento, si avrebbero notato alcuni problemi di codifica. Probabilmente, sono passati attraverso alcuni di questi problemi da soli dopo aver notato un tuffo nello svolgimento del tuo negozio. Come già detto, ci sono diversi problemi di codifica che influiscono sulle prestazioni del tuo negozio. Ma, questi cinque, che sono menzionati qui, sono in genere responsabili per l'84% dei problemi di prestazioni legate interessano il vostro negozio. Parliamo di come influenzano il negozio, e come possono essere ottimizzati

Codifica all'interno di un ciclo


Vi renderete conto che anche il più piccolo errore che si verifica all'interno di un ciclo è ingrandita. Generalmente, i cicli sono i più grandi errori di prestazione, in particolare quelli che ribadiscono query SQL o calcoli ridondanti

Vediamo come inefficienze dei calcoli ridondanti e query SQL all'interno di un ciclo in grado di influire sulle prestazioni del vostro negozio Magento

Calcoli entro un

Loop

Se si vuole calcolare la dimensione di un array usando un ciclo, quello funzione che si può utilizzare è count ()

for ($ i = 0; $ i < contare ($ file); $ i ++)

{

//codice

}

Count (), esegue e calcola veloce individualmente; rallenta solo quando utilizzato all'interno di un ciclo. Quando si avvia il calcolo della dimensione di una matrice con un sacco di dati e utilizzare conteggio per fornire l'uscita, troverete il rendimento rallentamento immensamente. Il motivo è il PHP non offre codice movimento loop-invariante automaticamente.

Il modo migliore per evitare questo problema di prestazioni è quello di chiamare la funzione di fuori del ciclo

$ rownum = count ($ file);

for ($ i = 0; $ i

​​{

//codice

}

query SQL all'interno di un ciclo


Come sta calcolando una query SQL può portare a problemi di prestazioni basate;. quando lo si esegue all'interno di un ciclo, vi è la possibilità di rallentare il vostro sito web Il più delle volte, si vedrà che i modelli Magento sono caricati nei cicli

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

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

$this->processProduct($product);

}

An matrice di ID del prodotto viene caricato al fine di elaborare il modello. Come si può vedere EAV è usato per effettuare questo ciclo che potrebbe richiedere di eseguire diverse query. In questo caso, il numero di query che si stanno eseguendo sarà moltiplicato con il numero di prodotti, e il risultato è un negozio lento che dà fuori scarse prestazioni.

Il modo migliore per ottimizzare sarebbe quella di evitare di caricare i prodotti in un ciclo. Quindi, cosa si può fare? dati Usa Magento . collezione che carica un insieme di prodotti facilmente seguito è riportato un esempio di come i modelli di raccolta dei dati raccolgono i prodotti attraverso la creazione di una matrice del prodotto diverso Ids e continuare ad aggiungere i prodotti richiesti ai loro campi

$ collezione = Mage: : getResourceModel ('catalogo /product_collection')

-getProductIds ()))

-

foreach ($ collezione da $ prodotto)

{

$ this-

}

Quando si sposta dai passanti e nel metodo modello di raccolta, si vedrà che le prestazioni del negozio ha infatti migliorato. Ricordate sempre di mantenere un controllo sulla memoria, in modo che quando si utilizzano modelli di raccolta dei dati, non caricare i dati che è più pesante rispetto alla dimensione della memoria. È necessario eseguire il risparmio di massa e la cancellazione delle query all'interno dei modelli, in modo da mantenere le prestazioni del vostro negozio.

Caricamento modelle

L'intero processo di caricamento di un modello nel tuo negozio non è davvero cache, che è il motivo per cui ogni volta che si chiama la funzione load (), alcune query vengono eseguiti all'interno del database, causando problemi di prestazioni nel tuo negozio

$ name = Mage :: getModel ('/Catalogo della merce') -

$ sku = Mage :: getModel ('catalogo /prodotto') -

$ attr = Mage :: getModel ('catalogo /prodotto') -

è un classico esempio di come le query vengono eseguiti sul database ogni volta che un particolare modello si chiama

Il modo migliore per affrontare questo problema è quello di garantire che ogni modello viene caricato una volta sola

$ prodotto = Mage :: getModel ('catalogo /prodotto') -

$ name = $ product-

$ sku = $ product-

$ attr = $ product-

A volte, siete interessati solo con il numero di serie. In un momento, esso non ha senso caricare l'intero modello. Con questo codice si può facilmente caricare il prodotto ID per un particolare prodotto

$ product = Mage :: getModel ('catalogo /prodotto') -

$ res ['id'] = $ prodotto-

Un altro metodo popolare per ricavare ID del prodotto è quello di utilizzare il metodo del prodotto nativo getIdBySku ()

$ res ['id'] = Mage :: getModel ('/Catalogo della merce') -

Codifica Collezioni

L'altra area nella codifica Magento che offre problemi è collezioni. Le collezioni sono abbastanza efficienti, ma che lavorano con un enorme insieme di dati, si dovranno garantire che li esegue la codifica con cura, altrimenti si dovrà affrontare problemi di prestazioni

Vediamo come collezioni possono causare problemi di codifica

Chiamata ridondante dei dati Imposta

È generalmente utilizza collezioni per recuperare un singolo elemento in particolare il primo punto prima iterazione del loop. Allora, che cosa potrebbe essere un problema qui? Quando non offri una limitazione sui risultati, il ciclo continuerà l'iterazione e dare fuori tutti gli articoli della collezione nel risultato, invece del primo articolo originale. Il seguente è un esempio di come le collezioni possono dare fuori tutti gli articoli

public function getRandomItem ()

{

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

ritorno $ Collezione > getFirstItem ();

}

L'applicazione del limite

public function getRandomItem ()

{

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

-

return $ Collezione

}

Le funzioni $ Collezione > setPageSize () e $ Collezione > setCurPage () offerta limitare il numero di articoli che sono recuperata dalla raccolta

È anche possibile modificare $ Collezione


Bio autore:

Deepa, un technical writer con i semafori software, che ora dedica il suo tempo a consigliare ai propri clienti di assumere gli sviluppatori di Magento. Offre informazioni, nonché suggerimenti e ultime tendenze in questo settore. Il suo amore per la lettura aiuta a fornire continuamente le informazioni più aggiornate sui diversi aspetti tecnici e progettuali di Magento