2013-04-10 202 views
0

以下是我的Ajax代碼,它需要3分15秒才能加載。可能是什麼問題呢?Ajax代碼加載非常緩慢

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <Script type="text/javascript"> 
    function im() 
    { 
    alert('iam in'); 
      var Name=document.getElementById("Name").value; 
      var pointsize=document.getElementById("pointsize").value; 
      var bckclr=document.getElementById("bckclr").value; 
      var color=document.getElementById("color").value; 
      var bcolor=document.getElementById("bcolor").value; 
    var url='Name='+Name+'&pointsize='+pointsize+'&bckclr='+bckclr+'&color='+color+'&bcolor='+bcolor; 
    alert("srihost.com/2.php?"+ url); 
    alert(url); 
    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     document.getElementById("Div_Im").innerHTML=xmlhttp.responseText; 
     document.getElementById("Div_Im").style.border="2px solid #A5ACB2"; 
     } 

     } 
    xmlhttp.open("GET","2.php?"+ url,true); 
    xmlhttp.send(); 
    } 
    </script> 
    </head> 
    <body> 
    Enter Name: <input type="text" id="Name" onchange="im()" value="yourname" name="Name" /> 
    pointsize: <input type="text" id="pointsize" onchange="im()" 
    value="50" name="pointsize" /> 
    BackGround Color: <input type="text" id="bckclr" value="red" 
    onchange="im()" name="bckclr" /> 
    FontColor: <input type="text" id="color" value="white" 
    onchange="im()" name="color" /> 
    Border Color: <input type="text" id="bcolor" value="blue" 
    onchange="im()" name="bcolor" /> 
    <div id="Div_Im"> 
    replace me 
    </div> 
    </body> 
    </html> 

,這裏是我的服務器網頁代碼

$Name=$_GET["Name"]; 
$pointsize=$_GET["pointsize"]; 
$bckclr=$_GET["bckclr"]; 
$color=$_GET["color"]; 
$bcolor=$_GET["bcolor"]; 
$filename = 'im.png'; 
$font='Times-Roman'; 

$cmd = " -background $bckclr -pointsize $pointsize -font $font -fill $color ". 
       " -strokewidth 1 -stroke $bcolor label:\"$Name\" "; 

    exec("convert $cmd $filename"); 
    echo('<img src="'.$filename.'">'); 

它基本上是難懂的代碼,通過創建圖像工作正常,但是當我使用Ajax它需要很長的時間來加載。

+2

一個提示。使用jQuery來進行AJAX調用,而不是手動創建XMLHttpRequest/ActiveXObject。它將使你的代碼更加可讀和簡潔,並且它將使整個AJAX調用腳本成爲一行代碼。 – 2013-04-10 11:58:33

+0

讓我試試並回復你 – Friend 2013-04-10 12:02:30

+1

**危險** - 您正在執行未轉義的用戶輸入!這可以讓任何可以向您的服務器發出HTTP請求的人執行任意命令! 'Name =「\'rm -rf *''! – Quentin 2013-04-10 12:06:14

回答

2

好吧有兩個原因可以做到。首先你正在執行文本框更改的Ajax。它一次又一次地發送ajax請求。只有在點擊某個按鈕/鏈接/提交時才應該調用ajax,以便只發送一個ajax調用。另外在PHP方面,如果第一種情況也是如此,那麼使用exec和convert函數可能會非常沉重。

1

我假設你自己試過同樣的命令,而且速度更快。

因此,確保在命令行上進行測試時,始終使用Debian中相同的用戶「su www-data」。

然後總是有一個日誌用於調試,所以你可以確保參數都設置好了。

[編輯] 你在哪個平臺上運行?什麼版本的PHP?什麼版本的圖像magik?

您應該添加一些更多的細節,以便讓人們幫助您!

2

在服務器端執行可能非常慢。運行像Firebug這樣的瀏覽器調試器,可以讓您觀看網絡請求。確認問題是HTTP請求發送到服務器和接收到響應之間的時間。