对yii框架的ajax响应非常慢

时间:2013-08-05 10:18:36

标签: php javascript mysql ajax yii

我对yii框架有一个奇怪的问题。在localhost上,ajax响应需要200ms(这很快,我很高兴)在我的实时服务器上,同样的功能需要4到7秒。

下面是我的php ajax功能: -

public function actionOpenpopup() {
                    $this->checkAjaxRequest();                  

                    $user_id = $_GET['uid'];

                    $rows = Yii::app()->db->createCommand()
                              ->select('*')
                              ->from('saved_designs')
                              ->where('uid=:id', array(':id' => $user_id))
                              ->order('date desc')
                              ->queryAll();

                    $i = 0;
                    foreach ($rows as $row) {
                              $rows[$i] = $row;
                              $i++;
                    }
                    if ($rows) {
                              echo json_encode($rows);
                    }
                    else
                              echo json_encode(null);
          }



 function checkAjaxRequest() {
                        if (Yii::app()->request->isAjaxRequest) {
                                  header('Content-Type: application/json; charset="UTF-8"');
                                  return true;
                        } else {
                                  throw new CHttpException('403', 'Forbidden Access');
                                  exit;
                        }
              }

javascript代码为: -

function sendAjaxCall(data){

$.ajax({
                                type : 'GET',
                                url : 'index.php/request/openpopup',
                                datatype : 'json',
                                data :data,
                 success: function (data) {
                        console.log(data);                      
                        }
});    

}

* 注意: - 到目前为止,数据库只有10到20条记录。另外在实时服务器上,我所有的ajax调用都会让我反应迟钝。

1 个答案:

答案 0 :(得分:1)

我会尝试一些事情。首先关闭echo你的json之后,我会杀死你的脚本,以确保没有其他任何东西运行:

if ($rows) {
    echo json_encode($rows);
    die();
}

同样在你的index.php上确保你的站点已经退出调试模式,如果你有两个以defined()开头的中间行中的任何一行启用每个页面加载Yii正在重新创建缓存文件和它可能需要一段时间,特别是如果你有像bootstrap这样的扩展。在为某人工作时,我遇到了这个问题,他们的网站是在GoDaddy上托管的。出于某种原因,文件创建速度非常慢,并且真的拖延了所有内容。

<?php
$yii=dirname(__FILE__).'/../framework/yii.php';
$config=dirname(__FILE__).'/protected/config/test.php';

//defined('YII_DEBUG') or define('YII_DEBUG',true);
//defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

require_once($yii);
Yii::createWebApplication($config)->run();

还有其他任何功能运行缓慢吗?您的错误日志中有错误吗?

帮助调试的另一个选项是创建另一个不需要AJAX调用的操作。以这种方式调试更容易,而不是依赖于ajax,而且它可以帮助您缩小问题的根源。另外不知道为什么但你得到你的行数组然后重新填充你的行数组,这是非常多余的。

public function actionCheckpopup() {
    $user_id = $_GET['uid'];

    $rows = Yii::app()->db->createCommand()
            ->select('*')
            ->from('saved_designs')
            ->where('uid=:id', array(':id' => $user_id))
            ->order('date desc')
            ->queryAll();

    echo json_encode($rows);
    die();
}

然后只需使用浏览器并转到http://yoursite.com/index.php/request/checkpopup?uid=1