getConfig फ़ंक्शन रन टाइम


12

मैंने अपने पेज के लिए रन टाइम मापा और देखा कि फ़ंक्शन getBaseCurrencyCode () को चलाने में एक सेकंड से अधिक समय लगता है। मेरे सभी कैशिंग सक्षम हैं।

मैंने फ़ंक्शन की जांच की और देखा कि निम्नलिखित कमांड:

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

एक सेकंड लेता है।

लेकिन जब मैं इसका उपयोग करता हूं Mage::getConfig()->getNode(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE); तो मिलीसेकंड लेता है

क्या कोई मुझे बता सकता है कि इस समय अंतर क्यों होता है?

कोई सुझाव?


यद्यपि मैंने आपके द्वारा सुझाए गए समाधानों की कोशिश की है, लेकिन अभी भी बड़े पैमाने पर समय अंतराल हैं। मुझे खुशी होगी यदि आप getConfig फ़ंक्शन को चलाने और इसे यहां पोस्ट करने में लगने वाले समय को माप सकते हैं।

मैंने इस फ़ंक्शन को माइक्रोटाइम फ़ंक्शन के साथ लपेटकर इस फ़ंक्शन को मापने का समय मापा

app\code\core\Mage\Core\Model इस मार्ग के बजाय स्थानीय पथ पर :

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

मैंने इसे इस कोड (माइक्रोटाइम के साथ समान कोड) से बदल दिया:

$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;

मेरा आउटपुट था:

function: getConfig() took me: 1.1326711177826 sec

मुझे आपका आउटपुट और रनटाइम देखकर खुशी होगी।

जवाबों:


4

2 के बीच के विन्यास को पार्स करने में छोटे अंतर हैं लेकिन उन पर प्रदर्शन को प्रभावित नहीं करना चाहिए। दोनों विधियाँ केवल डेटा को पुनः प्राप्त करने के लिए एक बड़े सरणी से गुजरती हैं।
getConfigवास्तव में कुछ सरल गणना करता है और फिर कॉल करता है getNode
केवल बड़ा अंतर मुझे लगता है कि है $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)इस कॉल: $this->_processConfigValue($fullPath, $path, $data);
यह हिस्सा निर्देश के साथ चिह्नित करता है {{...}}और कुछ बिंदु पर विधि कुछ परिस्थितियों में इसे स्वयं कहती है। कॉल
हटाने के बाद 2 को बेंचमार्क करने का प्रयास _processConfigValueकरें।


3

जब तुमने फोन किया

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

यह कॉल करेगा

 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);
    }

भी

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;
    }

और जब तुम बुलाओ

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

यह xmlफ़ाइल और रिटर्न आउटपुट पढ़ेगा ।

मुझे लगता है कि @ मर्सियर सर के अनुसार यह प्रदर्शन को प्रभावित नहीं करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.