tiempo de ejecución de la función getConfig

12

Medí el tiempo de ejecución de mi página y noté que la función getBaseCurrencyCode () tarda más de un segundo en ejecutarse. Todo mi almacenamiento en caché está habilitado.

Examiné la función y vi que el siguiente comando:

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

toma más de un segundo.

pero cuando uso el Mage::getConfig()->getNode(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE); toma milisegundos

¿Alguien puede decirme por qué ocurre esta diferencia horaria?

¿algún consejo?


Aunque he probado las soluciones sugeridas que ofreció, aún hay brechas de tiempo masivas. Estaría encantado si puede intentar medir el tiempo que le lleva ejecutar la función getConfig y publicarla aquí.

Intenté medir el tiempo que lleva esta función envolviendo este código con funciones de microtiempo

es decir, en la ruta local: en app\code\core\Mage\Core\Model lugar de esta línea:

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

Lo reemplacé con este código (el mismo código con 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;

mi salida fue:

function: getConfig() took me: 1.1326711177826 sec

Estaría encantado de ver su salida y tiempo de ejecución.

constructor91
fuente

Respuestas:

4

Existen pequeñas diferencias en el análisis de la configuración entre los 2, pero no deberían afectar el rendimiento. Ambos métodos simplemente pasan por una gran matriz para recuperar datos.
getConfigen realidad hace algunos cálculos simples y luego llama getNode.
La única gran diferencia que veo es que $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)llama a esto: $this->_processConfigValue($fullPath, $path, $data);.
Esta parte procesa las directivas marcadas con {{...}}y en algún momento el método se llama a sí mismo bajo ciertas circunstancias.
Intente comparar los 2 después de eliminar la _processConfigValuellamada.

Marius
fuente
3

Cuando usted llama

$this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE)

Llamará

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

además

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

y cuando llamas

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

Leerá el xmlarchivo y devolverá la salida.

Creo que según @Marius señor sugiere y no afectará el rendimiento.

Keyur Shah
fuente