如何使用代码点火器优化活动记录


How can i optimize a activerecords with codeigniter?

我有一个错误的问题:PHP 中数组的最大大小,$ids有一个最大值,我不知道如何解决它。阵列大小仅受服务器内存量的限制。我会内存不足"错误,我无法更改 php.ini我需要优化此功能,一些想法?

function delete_ScormByIdPlataforma($idPlatforma)
    {       
        if ($this->getIdScormVarsToDelete($idPlatforma) != 0)
        {
            $ids = $this->getIdScormVarsToDelete($idPlatforma);
            $this->db->where_in('ID_dispatch', $ids);
            $this->db->delete('scormvars');
        }//else
        //log_message('error', 'No se han encontrado scorms a borrar'.$this->db->_error_message().' - '.$this->db->last_query());
    }

function getIdScormVarsToDelete($idPlataforma)
    {
        $this->db->select('s.ID_dispatch');
        $this->db->from('scormvars as s');
        $this->db->join('dispatch as d', 's.ID_dispatch = d.ID_dispatch', 'INNER');
        $this->db->join('licencias as l', 'd.ID_licencia = l.ID_licencia','INNER');
        $this->db->where('l.id_plataforma', $idPlataforma);
        $query = $this->db->get();
        if($query)
        {
            if($query->num_rows()>0){
                foreach ($query->result() as $fila){
                    $data[] = $fila->ID_dispatch;
                }
                return array_unique($data);
            }
        }
        else
        {
            //log_message('error', 'No se han encontrado Dispatch a borrar'.$this->db->_error_message().' - '.$this->db->last_query());
            return 0;
        }
    }

这是你传递数据和编写代码的方式。因此,如果有很多连接或更大的函数,您可以将其切换到SP(存储过程)。

您可以通过以下方式检查查询速度

__construct中启用探查器

$this->output->enable_profiler(TRUE);

在你的代码中

$this->benchmark->mark('my_mark_start'); # my_mark_start can set any name with _start/ generate_start
$data['some_name'] = $this->model_name->modelFunctionName();
$this->benchmark->mark('my_mark_end'); # generate_end

这将显示您的代码处理数据所花费的时间

您无需编辑php.ini文件即可增加内存限制。您可以在运行时在脚本中设置新的内存限制,使用 ini_set()

<?php
ini_set('memory_limit', '256M');
// From here on, the memory limit will be 256M.