getConfig işlevi çalışma süresi


12

Sayfam için çalışma süresini ölçtüm ve getBaseCurrencyCode () işlevinin çalışması için bir saniyenin üzerine çıktığını fark ettim. Tüm önbellekleme etkin.

İşlevi inceledim ve şu komutu gördüm:

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

bir saniye sürer.

ama kullandığımda Mage::getConfig()->getNode(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE); milisaniye sürüyor

kimse bana bu zaman farkı neden olduğunu söyleyebilir?

herhangi bir tavsiye?


Sunulan önerilen çözümleri denemiş olmama rağmen hala büyük zaman boşlukları var. GetConfig işlevini çalıştırıp buraya göndermeniz için geçen süreyi ölçebilirseniz mutlu olurum.

Bu fonksiyonun mikrotime fonksiyonları ile sarılarak bu fonksiyonun zamanını ölçmeye çalıştım

yani yerel yol üzerinde: app\code\core\Mage\Core\Model bu satır yerine:

$configValue = $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE);

Bu kod ile değiştirdim (mikrotime ile aynı kod):

$start = microtime(true);

$configValue = $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE);

$time_elapsed_secs = microtime(true) - $start;

echo "function: getConfig() took me: " .  $time_elapsed_secs . " sec<br />";

die;

benim çıktı:

function: getConfig() took me: 1.1326711177826 sec

Çıktınızı ve çalışma zamanınızı görmekten memnuniyet duyarım.

Yanıtlar:


4

Yapılandırmayı 2 arasında ayrıştırırken küçük farklılıklar vardır, ancak bunlar performansı etkilememelidir. Her iki yöntem de veri almak için büyük bir diziden geçer.
getConfigaslında bazı basit hesaplamalar yapar ve sonra çağırır getNode.
Gördüğüm tek büyük fark olduğunu $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)bu çağrıları: $this->_processConfigValue($fullPath, $path, $data);.
Bu bölüm, işaretli yönergeleri işler {{...}}ve bir noktada yöntem belirli koşullar altında kendini çağırır. Aramayı
kaldırdıktan sonra 2'yi karşılaştırmayı deneyin _processConfigValue.


3

Aradığın zaman

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

Arayacak

 public function getConfig($path)
    {
        if (isset($this->_configCache[$path])) {
            return $this->_configCache[$path];
        }

        $config = Mage::getConfig();

        $fullPath = 'stores/' . $this->getCode() . '/' . $path;
        $data = $config->getNode($fullPath);
        if (!$data && !Mage::isInstalled()) {
            $data = $config->getNode('default/' . $path);
        }
        if (!$data) {
            return null;
        }
        return $this->_processConfigValue($fullPath, $path, $data);
    }

Ayrıca

protected function _processConfigValue($fullPath, $path, $node)
    {
        if (isset($this->_configCache[$path])) {
            return $this->_configCache[$path];
        }

        if ($node->hasChildren()) {
            $aValue = array();
            foreach ($node->children() as $k => $v) {
                $aValue[$k] = $this->_processConfigValue($fullPath . '/' . $k, $path . '/' . $k, $v);
            }
            $this->_configCache[$path] = $aValue;
            return $aValue;
        }

        $sValue = (string) $node;
        if (!empty($node['backend_model']) && !empty($sValue)) {
            $backend = Mage::getModel((string) $node['backend_model']);
            $backend->setPath($path)->setValue($sValue)->afterLoad();
            $sValue = $backend->getValue();
        }

        if (is_string($sValue) && strpos($sValue, '{{') !== false) {
            if (strpos($sValue, '{{unsecure_base_url}}') !== false) {
                $unsecureBaseUrl = $this->getConfig(self::XML_PATH_UNSECURE_BASE_URL);
                $sValue = str_replace('{{unsecure_base_url}}', $unsecureBaseUrl, $sValue);
            } elseif (strpos($sValue, '{{secure_base_url}}') !== false) {
                $secureBaseUrl = $this->getConfig(self::XML_PATH_SECURE_BASE_URL);
                $sValue = str_replace('{{secure_base_url}}', $secureBaseUrl, $sValue);
            } elseif (strpos($sValue, '{{base_url}}') !== false) {
                $sValue = Mage::getConfig()->substDistroServerVars($sValue);
            }
        }

        $this->_configCache[$path] = $sValue;

        return $sValue;
    }

ve aradığın zaman

Mage::getConfig()->getNode(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

xmlDosyayı okuyacak ve çıktıyı döndürecektir.

Bence @Marius efendim göre önermek ve performansı etkilemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.