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