2013-08-05 66 views
0

我有yii框架的奇怪問題。在本地主機上,ajax響應需要200毫秒(這是快速的,我很飽和),在我的服務器上,相同的功能需要4到7秒。yii框架上非常緩慢的ajax響應

下面是我的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

此無關的Java。您是否可以在Chrome網絡控制檯中檢查哪部分請求需要時間?如果它是DNS查找等 –

+0

也許你有不好的互聯網或主機放慢了某些東西(大量的請求) – ineersa

+0

從本地和現場服務器上有相同的代碼判斷,可以肯定的是它不是代碼。這意味着它是服務器或您與實時服務器之間的連接。如果您處於共享主機環境,則可能有另一個虛擬主機佔用資源。 –

回答

1

我會嘗試一些事情。首先你echo您的JSON我會殺了你的腳本之後,以確保沒有其他運行:

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

也在你index.php確保你有取出的調試模式的網站,如果你有任何中間的兩個以defined()開頭的行啓用每個頁面加載Yii正在重新創建緩存文件,並且可能需要一段時間,尤其是如果您有像引導程序一樣的擴展。在爲某人工作並且他們的網站託管在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

+0

另一個問題是數據庫與代碼在同一臺服務器上? – Pitchinnate

+0

非常感謝您的詳細解釋。我評論了你指出的兩條線,但它並沒有解決我的問題。反應很慢。是的數據庫和代碼是在同一臺服務器(亞馬遜EC2) – RashFlash

+0

嗨Pitchinnate,我嘗試使用直接鏈接調用(如你所說),它產生的結果非常快大約1至2秒。所以有一點是肯定的,服務器響應是好的,但Ajax調用需要很多時間。任何解決方案 – RashFlash