0

我对 yii 框架有一个奇怪的问题。在本地主机上,ajax 响应需要 200 毫秒(这很快,我很满意),而在我的实时服务器上,相同的功能需要 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 调用都给了我缓慢的响应。

4

1 回答 1

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

于 2013-08-05T13:08:46.830 回答