Magento: Mage :: registry ('current_product') эффективен?

Это, вероятно, что-то очевидное, если вы знаете процесс, стоящий за ним. Но когда вы используете Mage::registry('current_product') на странице продукта, например, вы просто ссылаетесь на то, что уже загружено, или вы загружаете это каждый раз, когда вы запускаете эту строку кода?

Иными словами, что более эффективно? (псевдокод ниже)

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

Или…

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

Related of "Magento: Mage :: registry ('current_product') эффективен?"

призвание

 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 один раз, а затем повторно использует переменную.

Однако, практически говоря, у вас будут большие узкие места, прежде чем это станет реальной проблемой.