Php yii框架上的ajax响应非常慢
我对yii框架有一个奇怪的问题。在localhost上,ajax响应需要200毫秒(这很快,我也很满意),而在我的实时服务器上,相同的功能需要4到7秒 下面是我的php ajax函数:-Php yii框架上的ajax响应非常慢,php,javascript,mysql,ajax,yii,Php,Javascript,Mysql,Ajax,Yii,我对yii框架有一个奇怪的问题。在localhost上,ajax响应需要200毫秒(这很快,我也很满意),而在我的实时服务器上,相同的功能需要4到7秒 下面是我的php ajax函数:- public function actionOpenpopup() { $this->checkAjaxRequest(); $user_id = $_GET['uid'];
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;
}
}
function sendAjaxCall(data){
$.ajax({
type : 'GET',
url : 'index.php/request/openpopup',
datatype : 'json',
data :data,
success: function (data) {
console.log(data);
}
});
}
javascript代码是:-
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;
}
}
function sendAjaxCall(data){
$.ajax({
type : 'GET',
url : 'index.php/request/openpopup',
datatype : 'json',
data :data,
success: function (data) {
console.log(data);
}
});
}
*注意:-到目前为止,数据库只有10到20条记录。同样在live server上,我所有的ajax调用响应都很慢。我会尝试一些方法。首先,在你
echo
你的json之后,我会终止你的脚本,以确保没有其他东西运行:
if ($rows) {
echo json_encode($rows);
die();
}
另外,在index.php
上,如果中间两行以defined()
开头的任何一行都已启用,请确保站点已退出调试模式。每个页面加载都是在重新创建缓存文件,这可能需要一段时间,特别是如果包含像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();
然后使用浏览器进入
http://yoursite.com/index.php/request/checkpopup?uid=1
这与Java无关。您能在Chrome网络控制台中检查请求的哪一部分需要时间吗?如果是DNS查找ETC,那么从本地服务器和实时服务器上的代码来看,可能是由于某个原因(例如,大量请求)导致了坏的internet或主机速度减慢,可以安全地假设这不是代码。这意味着它是服务器或您与live server之间的连接。如果您在共享主机环境中,可能有另一个vhost占用了资源。感谢您的回复。我使用的是AmazonEC2服务器。我的其他项目运行良好。但是这个(基于yii的)有一些问题。非常感谢您的详细解释。我评论了你指出的两行,但这并没有解决我的问题。反应很慢。是的,数据库和代码在同一台服务器(AmazonEC2)上,我尝试使用直接链接(正如您所说)调用它,它可以非常快地生成结果,大约1到2秒。所以有一点是肯定的,服务器响应良好,但Ajax调用需要花费大量时间。有什么解决方案吗?我会在Chrome或Firefox上安装firebug,然后观察控制台,你会看到Ajax请求发出又返回。它可能会帮你找到一些东西,我已经做过了。什么也没找到。我所能看到的是ajax需要4到7秒的时间,然后生成resposne。这就是firebug告诉你的,你修改了你的actionOpenpopup()
并修正了$rows
的填充方式?我唯一能想到的另一件事是开始在代码中添加一些时间戳,并将其包含在返回的json数组中,以便您可以看到代码的哪些部分花费了很长时间。