使用Yii::app()的开销->;几次?

使用Yii::app()的开销->;几次?,yii,Yii,如果我必须在一行中执行多个查询,那么这样做是否更好: $connection = Yii::app()->db; function mainFunction() { $connection = Yii::app()->db; // do stuff with $connection for $dbResult1 // do stuff with $connection for $dbResult2 // do stuff with $connection for $

如果我必须在一行中执行多个查询,那么这样做是否更好:

$connection = Yii::app()->db;
function mainFunction() {
  $connection = Yii::app()->db;
  // do stuff with $connection for $dbResult1
  // do stuff with $connection for $dbResult2
  // do stuff with $connection for $dbResult3
}
曾经。。。然后继续使用$connection,如果我有多个这样的函数,是否会有开销:

function mainFunction() {
  $dbResult1 = dbresult1();
  $dbResult2 = dbresult2();    
  $dbResult2 = dbresult3();
}

function dbresult1() {
   $connection = Yii::app()->db;
   // do stuff
   return $result;
}

function dbresult2() {
   $connection = Yii::app()->db;
   // do stuff
   return $result;
}

function dbresult3() {
   $connection = Yii::app()->db;
   // do stuff
   return $result;
}
这样做是否更好:

$connection = Yii::app()->db;
function mainFunction() {
  $connection = Yii::app()->db;
  // do stuff with $connection for $dbResult1
  // do stuff with $connection for $dbResult2
  // do stuff with $connection for $dbResult3
}

您可以跟踪源代码,查看调用
Yii::app()->db时发生的情况:

Yii::app()
返回
YiiBase
的静态
app
属性。您可以看到源代码

Yii::app()->db
在这里它变得更有趣,因为有些东西被查找到了。您可以看到源代码

getComponent()
是找到源代码的
CModule方法


如您所见,
Yii::app()->db
会导致一些方法调用和数组查找。如果性能非常关键,您可能应该缓存db实例。否则,我会专注于编写干净易读的代码,而不会在意这些小改动。

尤其是应用程序的db组件也是一个核心组件,因此它已经初始化,作为应用程序初始化的一部分。如果函数位于扩展CActiveRecord的类内,请改用
$this->getDbConnection()
public function getComponent($id,$createIfNull=true)
{
    if(isset($this->_components[$id]))
        return $this->_components[$id];
    elseif(isset($this->_componentConfig[$id]) && $createIfNull)
    {
        $config=$this->_componentConfig[$id];
        if(!isset($config['enabled']) || $config['enabled'])
        {
            Yii::trace("Loading \"$id\" application component",'system.CModule');
            unset($config['enabled']);
            $component=Yii::createComponent($config);
            $component->init();
            return $this->_components[$id]=$component;
        }
    }
}