CakePHP查询 - 出乎意料的大延迟

时间:2014-07-03 02:25:35

标签: mysql cakephp

令我很恼火的是,AJAX请求启动时的以下查询需要1秒才能处理在页面刷新(同步)期间调用的时间仅为2毫秒。我花了几个小时追查出了什么问题,但我很无奈。我尝试过Model-> read,Model-> find,Model-> query()但它需要相同的时间。我认为像这样的简单查询1秒钟并不自然。可能是CakePHP模型浪费了太多的资源和时间。但我的直觉说它与查询缓存有关。

protected function _user_info($id= NULL){
            //benchmarking
    $time = -microtime(true);

    if(!$id){
        if($this->Auth->loggedIn())
            $id = $this->Auth->user('id');
        else
            return NULL;
    }
    $this->loadModel('User');
    /*$findOptions = array('conditions'=>array('User.id'=>$id),
        'fields'=>'User.id, User.name, User.email, User.role, dp',
        'limit'=>1,
        'recursive'=>-1);
    $r = $this->User->find('first', $findOptions);
    */
    $r = $this->User->query("SELECT * FROM users WHERE id = '".$id."' LIMIT 1");
    $time += microtime(true);
    echo '<h1>'.$time.'</h1>';       //out- time taken for the query
    return $r['User'];
}

任何形式的帮助都会很棒!

2 个答案:

答案 0 :(得分:0)

首先,尝试普通的Cake搜索样式:

// You should have containable
$this->User->contain();
$r = $this->User->find('first',array('conditions'=>array('id'=>$id)));

测试一下。 欢呼声。

答案 1 :(得分:0)

如果您在debug 2,那么您不会计算执行时间,也会计算调试开销。

启用调试的缓存将不会长时间使用,这意味着将要求DB对表进行DESCRIBE,将创建sql日志,可能会多次请求昂贵的对象反射,尤其是在遇到警告,异常或非致命错误,所有这些将使相当更长。