我对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调用都会让我反应迟钝。
答案 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