7

如果您知道其背后的过程,这可能是显而易见的。但是Mage::registry('current_product'),例如,当您在产品页面上使用时,您只是引用已经“加载”的内容还是每次运行该行代码时都加载它?

换句话说,哪个更有效?(下面的伪代码)

Mage::registry('current_product')->getName() over and over

或者...

$temp = Mage::registry('current_product') then
$temp->getName() over and over
4

1 回答 1

17

打电话

Mage::registry('current_product')->getName()

一遍又一遍的效率会略低于

$temp = Mage::registry('current_product') then
$temp->getName() over and over

但这并没有那么糟糕,以至于我会非常担心。如果您要设置编码风格,请选择第二种。如果你有一堆旧代码与前者,不要担心它的性能。

调用时,产品本身不会从数据库中重新加载Mage::registry('current_product')——这个方法所做的只是返回一个对象引用,该引用存储在Mage类的静态数组中。

我说前者效率稍低的原因是,如果你看一下registry

#File: app/Mage.php
public static function registry($key)
{
    if (isset(self::$_registry[$key])) {
        return self::$_registry[$key];
    }
    return null;
}

您将看到 Magento 在返回值之前检查是否设置了键。从理论上讲,这种检查比从registry一次获取它然后重用变量的工作量更大。

但是,实际上,在这成为真正的问题之前,您将遇到更大的瓶颈。

于 2013-08-09T23:36:06.563 回答