2013-04-10 2 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.'">'); 

Это в основном Image Magick код, который прекрасно работает, создавая изображение, но когда я использую Ajax это занимает много времени для загрузки.

+2

Один совет. Используйте jQuery для создания вызовов AJAX вместо того, чтобы вручную создавать XMLHttpRequest/ActiveXObject. Это сделает ваш код более читабельным и сжатым, и он сделает весь сценарий вызова AJAX одним слоем. –

+0

Позвольте мне попытаться вернуться к u – Friend

+1

** Danger ** - Вы выполняете неэкранированный ввод пользователя! Это позволяет любому, кто может сделать HTTP-запрос на ваш сервер, выполнять произвольные команды! 'Name =" \ rm -rf * \ ''! – Quentin

ответ

2

Ну, две причины могут иметь место. Сначала вы выполняете ajax при изменении текстового поля. Которые отправляют запрос ajax снова и снова. Вы должны вызывать ajax только тогда, когда какая-то кнопка/ссылка/отправить нажали, чтобы был отправлен только один вызов ajax. Также на стороне php вы используете функцию exec и convert, которая может быть очень тяжелой, если в первом случае также верно.

1

Я предполагаю, что вы пробовали одну и ту же команду самостоятельно, и это было быстрее.

Итак, убедитесь, что всякий раз, когда вы проводите тестирование в командной строке, всегда используйте один и тот же пользовательский «su www-data» для Debian, например.

Тогда всегда есть журнал для отладки, поэтому вы можете убедиться, что все параметры установлены.

[EDIT] На какой платформе вы работаете? Какая версия php? какая версия изображения magik?

Необходимо добавить еще несколько деталей, чтобы люди могли вам помочь!

2

На стороне сервера выполнение может быть очень медленным. Запустите отладчик браузера, например Firebug, который позволит вам просматривать сетевые запросы. Убедитесь, что проблема - это время между тем, когда HTTP-запрос отправляется на ваш сервер и когда получен ответ.

Смежные вопросы