เวลาเรียกใช้ฟังก์ชัน 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 และโพสต์ไว้ที่นี่

ฉันลองวัดเวลาที่ฟังก์ชั่นนี้ใช้โดยห่อโค้ดนี้ด้วยฟังก์ชัน microtime

ie บนพา ธ โลคัล: app\code\core\Mage\Core\Model แทนที่จะเป็นบรรทัดนี้:

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

ฉันแทนที่ด้วยรหัสนี้ (รหัสเดียวกันกับ microtime):

$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 ข้อแตกต่างที่ยิ่งใหญ่ที่ผมเห็นก็คือว่านี้เรียกว่า: ส่วนนี้ประมวลผลคำสั่งที่ทำเครื่องหมายด้วยและในบางจุดวิธีการเรียกมันว่าตนเองภายใต้สถานการณ์บางอย่าง ลองเกณฑ์มาตรฐาน 2 หลังจากคุณลบสายออกgetNode
$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)$this->_processConfigValue($fullPath, $path, $data);
{{...}}
_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ไฟล์และส่งออกผลลัพธ์

ฉันคิดว่าตาม@Marius คุณแนะนำและมันจะไม่ส่งผลกระทบต่อประสิทธิภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.