以下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";
}
?>
答案 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查询所需的时间。