Php 与MySQL的更快连接?

Php 与MySQL的更快连接?,php,javascript,jquery,html,mysql,Php,Javascript,Jquery,Html,Mysql,我有以下问题。 我正在开发一个基于浏览器的小游戏,我用键盘键添加了运动。 它正在工作,但现在我想添加一个代码,它将把播放器的当前位置发送到MySQL数据库。 问题是,当我按下按钮时,例如W,我的角色不断向上移动,每一步他都向MySQL发送一个数据,创建一个长长的PHP请求列表。 我怎样才能加快这个过程? 以下是我使用的代码部分: if (key == key_W) { // Player Up if (parseFloat(wzr.style.top)-6 < 0) { $('#wzro

我有以下问题。 我正在开发一个基于浏览器的小游戏,我用键盘键添加了运动。 它正在工作,但现在我想添加一个代码,它将把播放器的当前位置发送到MySQL数据库。 问题是,当我按下按钮时,例如W,我的角色不断向上移动,每一步他都向MySQL发送一个数据,创建一个长长的PHP请求列表。 我怎样才能加快这个过程? 以下是我使用的代码部分:

if (key == key_W) { // Player Up
if (parseFloat(wzr.style.top)-6 < 0)
{
 $('#wzro').stop().animate({
 top: 342
 }, 0, function() {
 $('#wzro').empty();
 });
YWalk();
}

else
{
 $('#wzro').stop().animate({
 top: '-=6'
 }, 0, function() {
 $('#wzro').empty();
 });
YWalk();
}
}

function YWalk(){
            var wzr = document.getElementById("wzro");
            var xmlHttp;
            if (window.XMLHttpRequest){
            xmlHttp=new XMLHttpRequest();
            }
            else{
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlHttp.open("GET","datachodzeniey.php?y="+ wzr.style.top);
            xmlHttp.send(null);
}
if(key==key\u W){//Player Up
if(parseFloat(wzr.style.top)-6<0)
{
$('#wzro').stop().animate({
顶部:342
},0,函数(){
$('#wzro').empty();
});
YWalk();
}
其他的
{
$('#wzro').stop().animate({
顶部:'-=6'
},0,函数(){
$('#wzro').empty();
});
YWalk();
}
}
函数YWalk(){
var wzr=document.getElementById(“wzro”);
var-xmlHttp;
if(window.XMLHttpRequest){
xmlHttp=新的XMLHttpRequest();
}
否则{
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}
open(“GET”、“datachodzeney.php?y=“+wzr.style.top”);
xmlHttp.send(空);
}
在datachodzeney.php中:

<?php
session_start();
$username = $_SESSION['username'];
$y=$_GET['y'];

$connect = mysql_connect("localhost", "root", "");
$select_db = mysql_select_db("testdb", $connect);
$q=mysql_query("update players set y='$y' where dispname='$username'");
?>

以下是两个请求之间间隔20秒的实现:

            var nowTime = new Date(); 
            var lastExecuted= new Date();

            if (key == key_W) { // Player Up
                nowTime = new Date();
                if (parseFloat(wzr.style.top)-6 < 0)
                {
                    $('#wzro').stop().animate({
                        top: 342
                    }, 0, function() {
                        $('#wzro').empty();
                    });

                } else {
                    $('#wzro').stop().animate({
                        top: '-=6'
                    }, 0, function() {
                        $('#wzro').empty();
                    });
                }
                //time interval in  milliseconds - here i have set it to 20seconds
                if (nowTime - lastExecuted >= 20000) {
                    YWalk();
                }
            }

            function YWalk(){
                lastExecuted = new Date();
                var wzr = document.getElementById("wzro");
                var xmlHttp;
                if (window.XMLHttpRequest){
                    xmlHttp=new XMLHttpRequest();
                }
                else{
                    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlHttp.open("GET","datachodzeniey.php?y="+ wzr.style.top);
                xmlHttp.send(null);
            }
var nowTime=新日期();
var lastExecuted=新日期();
如果(键==键W){//Player Up
nowTime=新日期();
if(parseFloat(wzr.style.top)-6<0)
{
$('#wzro').stop().animate({
顶部:342
},0,函数(){
$('#wzro').empty();
});
}否则{
$('#wzro').stop().animate({
顶部:'-=6'
},0,函数(){
$('#wzro').empty();
});
}
//以毫秒为单位的时间间隔-这里我将其设置为20秒
如果(nowTime-lastExecuted>=20000){
YWalk();
}
}
函数YWalk(){
lastExecuted=新日期();
var wzr=document.getElementById(“wzro”);
var-xmlHttp;
if(window.XMLHttpRequest){
xmlHttp=新的XMLHttpRequest();
}
否则{
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}
open(“GET”、“datachodzeney.php?y=“+wzr.style.top”);
xmlHttp.send(空);
}

首先,这里是一个整洁的代码版本,没有任何功能更改:

//in some outer scope
var $wzro = $("#wzro");

//in the key event handler
if (key == key_W) { //Player Up
    var top = parseInt($wzro.css('top')) - 6;
    top = (top < 0) ? 342 : top;
    $wzro.empty().css('top', top);
    $.ajax({ url: "datachodzeniey.php?y=" + top });
}
//在某个外部范围内
var$wzro=$(“wzro”);
//在键事件处理程序中
如果(键==键W){//Player Up
var top=parseInt($wzro.css('top'))-6;
top=(top<0)?342:top;
$wzro.empty().css('top',top);
$.ajax({url:datachodzeney.php?y=“+top});
}
现在,为了减少ajax调用的数量:

//in some outer scope
var $wzro = $("#wzro");
var u = {//u for upload
    url: "datachodzeniey.php?y=",
    allow: true,
    reallow: function(){ u.allow = true; },
    delay: 100//(milliseconds) adjust as necessary
};

//in the key event handler
if (key == key_W) { //Player Up
    var top = parseInt($wzro.css('top')) - 6;
    top = (top < 0) ? 342 : top;
    $wzro.empty().css('top', top);
    if(u.allow) {
        $.ajax({ url: u.url + top });
        u.allow = false;
        setTimeout(u.reallow, u.delay);
    }
}
//在某个外部范围内
var$wzro=$(“wzro”);
var u={//u用于上载
url:“datachodzeney.php?y=”,
允许:对,
reallow:function(){u.allow=true;},
延迟:100/(毫秒)根据需要进行调整
};
//在键事件处理程序中
如果(键==键W){//Player Up
var top=parseInt($wzro.css('top'))-6;
top=(top<0)?342:top;
$wzro.empty().css('top',top);
如果(美国允许){
$.ajax({url:u.url+top});
u、 允许=假;
设置超时(u.reallow,u.delay);
}
}

@Jaspalingh的memcache想法听起来不错,可以独立于上面的代码实现

检查用户上次运行YWalk函数的时间,并根据该值保存数据。为什么
.animate(…)
的持续时间=0?当然
.css(…)
更合适。通过这个和其他简化,我可以将上面的所有内容都简化为8行代码。这是一个好主意,但其他玩家会在20秒的延迟后看到对方/你可以用2-3秒来代替20秒。如果你想与服务器端的php和mysql交互,同时又不受ajax请求过载的影响,这是我想到的唯一解决方案。另一个选择是消除mysql交互,改用memcache。您可以定期写入数据库。这会快得多谢谢!你有我如何使用memcache的例子吗?你不能在共享服务器上设置memcache。若您有云实例、专用服务器或任何可以在服务器上安装软件的方式,则可以轻松设置memcache。你可以在这里了解更多