使用PHP优化执行时间

时间:2018-10-18 01:47:21

标签: php codeigniter

我正在处理不少于25,000条记录。但是,它以某种方式超过了最大执行时间。我正在使用Codeigniter 3.0。

记录是我制作的库处理过的PDF文本数据。如果仅显示它,似乎并没有超过执行时间,但是当事情开始变得复杂时,例如将其处理到数据库(MySQL),它就会超过300sec(我重新配置了)执行时间。

为了说明

  function process() {

        $data = processThePDF(); //outputs the records / 25,000 records

        if ($data) {
                    foreach ($data as $dt) {

                        $info = $this->just_another_model->view($dt['id']); //get the old record

                        if ($info) {
                            //update
                            $this->just_another_model->update([$params]);
                            //Log Update
                            $this->just_another_model->log([$params]);
                        } else {
                            //Register
                            $this->just_another_model->update([$params]);
                            //Log Register
                            $this->just_another_model->log([$params]);
                        }
                    }
                }
}

所以我的问题是: 1.是否有更好的方法来优化此效果? 2.在处理之前写一个json文件或文本文件是否方便?

1 个答案:

答案 0 :(得分:0)

将数据存储在数组中,并批量更新/插入。

function process() {

$data = processThePDF(); //outputs the records / 25,000 records
$update_data = array();
$update_data_2 = array();

if ($data) {
    foreach ($data as $dt) {

        $info = $this->just_another_model->view($dt['id']); //get the old record

        if ($info) {        
            $update_data[] = array($params);
        } else {
            $update_data_2[] = array($params);
        }
    }

    if(count(update_data) > 0) 
        $this->just_another_model->update_batch($update_data);
    if(count(update_data_2) > 0)
        $this->just_another_model_2->update_batch($update_data_2);
}

此外,您可以在循环之前分批获取旧记录并将其格式化为数组,以便可以通过id $old_records[$dt['id']]

进行访问