加快这个Ajax响应

时间:2015-06-20 11:32:06

标签: javascript php ajax

以下Ajax可以正常工作,但只需要在客户端通知用户已经使用了用户名就需要一段时间。有什么方法可以加快这个响应,或者这只是Ajax的正常行为。

客户:              

    <title>Choose a username</title> 

    <style>
    #targetDiv {
      background-color: #FF9999;
      width: 40%;
    }
    </style>

    <script type = "text/javascript">
      var XMLHttpRequestObject = false; 

      if (window.XMLHttpRequest) {
        XMLHttpRequestObject = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
      }

      function getData(dataSource) 
      { 
        if(XMLHttpRequestObject) {
          XMLHttpRequestObject.open("GET", dataSource); 

          XMLHttpRequestObject.onreadystatechange = function() 
          { 
            if (XMLHttpRequestObject.readyState == 4 && 
              XMLHttpRequestObject.status == 200) { 
                if(XMLHttpRequestObject.responseText == "taken"){
            var targetDiv = document.getElementById("targetDiv");

            targetDiv.innerHTML = "<div>That username is taken.</div>";
                }
            } 
          } 

          XMLHttpRequestObject.send(null); 
        }
      }

      function checkUsername(keyEvent) 
      {
        keyEvent = (keyEvent) ? keyEvent: window.event;
        input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement;

        if (keyEvent.type == "keyup") {
          var targetDiv = document.getElementById("targetDiv");
          targetDiv.innerHTML = "<div></div>";

          if (input.value) {
            getData("check.php?name=" +input.value);
          } 
        }
      }
    </script>

  </head> 

  <body>

    <H1>Choose a username</H1>

    Enter your new username <input id = "textField" type = "text" 
      name = "textField" onkeyup = "checkUsername(event)">

      <div id = "targetDiv"><div></div></div>

  </body> 

</html>

服务器

<?php 
    if ($_GET["name"] == "steve"){
      echo "taken";
    }
    else {
      echo "ok";
    } 
?>

3 个答案:

答案 0 :(得分:3)

你的问题是&#34;如何加快回应#34;。

您的服务器通过网络发送响应。 净转账所需的时间总是不同的。 但是,您可以通过优化Web服务器和PHP的配置来尝试更快地响应服务器。您可以使用siege"Microsoft.XMLHTTP等基准工具测试服务器的响应行为。 然后调整,测试,比较结果,重复直到满意。 对服务器的请求是对服务器的请求。无论如何,如果它是由浏览器通过ajax或基准工具完成的。

例如,与让我们说PHP 5.3相比,升级到PHP 5.6并启用和调整opcache可以提高性能。有很多可能的优化。这个问题太广泛了,无法详细说明。

在查看客户端JS时:这是普通的JS。 没有太大的改进空间。我唯一想到的是 将xhrObject for IE从new ActiveXObject("Msxml2.XMLHTTP.6.0");更改为new ActiveXObject("Msxml2.XMLHTTP.3.0");(并且可能添加回退到{{1}})。

答案 1 :(得分:1)

从服务器获取响应总是需要一些时间,您可以将服务器调整得更快,但总会有延迟。

但是,您可以做的是在连接服务器时显示加载速度。

答案 2 :(得分:1)

您还可以尝试在Memcached中存储用户名,因为这样可以减少sql查询所需的时间。