Bom, vamos ao resultado do teste.
Localmente (php 5.3.x)
Antes:
Memoria Usada: 148MB
Depois:
Memoria Usada: 40MB
Usando a nova função CDbConnection::cache().
Exemplo:
$dependency = new CDbCacheDependency('SELECT MAX(dataatualizacao) FROM paciente');
$paciente = Paciente::model()->cache(0, $dependency)->findAll(array('order' => 'nome ASC', 'condition' => 'bloqueado = 0'));
Observação:
Esse foi a unica função que conseguir deixar estável, a outra beginCache(), ela fica variando não sei o por que, depois com calma vou testar novamente.
Servidor Web (Produção:php 5.2.15)
Antes:
Memoria Usada: 148,75MB
Depois:
Memoria Usada: 11MB
Usando a nova função CDbConnection::beginCache().
Exemplo 1:
if ($this->beginCache($id, array('dependency' => array(
'class' => 'system.caching.dependencies.CDbCacheDependency',
'sql' => 'SELECT MAX(dataatualizacao) FROM paciente')))) {
$paciente = Paciente::model()->findAll(array('order' => 'nome ASC', 'condition' => 'bloqueado = 0'));
$paciente = CHtml::listData($paciente, 'codpaciente', 'codigonome');
echo CHtml::dropDownList('codpaciente', $_GET["codpaciente"], $paciente, array(
'prompt' => 'Selecione',
'class' => 'select w400px',
));
$this->endCache();
}
Exemplo 2:
AtendimentoController.php
public function getTbCatalogDependency() {
$dbDepend = new CDbCacheDependency("SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = :schema AND TABLE_NAME = :table");
$dbName = explode(';', Yii::app()->db->connectionString); //mysql:host=$dbhost;dbname=$dbname
$dbName = explode('=', $dbName[1]);
$dbDepend->params = array(':schema' => $dbName[1], ':table' => 'paciente');
return $dbDepend;
}
view/atendimento/_form.php
if ($this->beginCache($id, array('dependency' => $this->getTbCatalogDependency()))) {
$paciente = Paciente::model()->findAll(array('order' => 'nome ASC', 'condition' => 'bloqueado = 0'));
$paciente = CHtml::listData($paciente, 'codpaciente', 'codigonome');
echo CHtml::dropDownList('codpaciente', $_GET["codpaciente"], $paciente, array(
'prompt' => 'Selecione',
'class' => 'select w400px',
));
$this->endCache();
}
Observação:
Fique surpreso pelos 11MB do resultado, percebi que o CDbConnection::cache() só deve funcionar no php 5.3, testei com cache(1000) e outras variações e não cachio o resultado.
Outro detalhe, para que funcione o cache do banco de dados, tem que incluir no arquivo de configuração o cache CDbCache.
'components' => array(
...
'cache'=>array(
'class'=>'system.caching.CDbCache',
),