快速ajax请求servlet导致性能问题

时间:2013-11-21 19:18:49

标签: servlets

我是使用servlet和ajax进行编程的新手。我有用于跟踪图像上鼠标操作的客户端代码。我需要在拖动过程中将坐标发送到servlet进行处理。我为此使用ajax。我有代码工作,但在处理servlet中的请求似乎有一个滞后。特别是拖动。

客户端代码:

$(document).ready(function(){ 


    // detect mousedown
   $("#imgslot").mousedown(function(event){

      var leftClick = false;       // if user clicked the left mouse button                                                     
      var rightClick = false;      // if user clicked the right mouse button
      var interaction={type:"",action:"",lClick:"",rClick:"",x:"null",y:""};

      //if the client left clicks
      if(event.which===1){

          leftClick=true;
      }

              //if the client left clicks
      if(event.which===3){

          rightClick=true;
      }

      interaction={type:"interaction",action:"mousedown",lClick:leftClick,rClick:rightClick,x:event.clientX,y:event.clientY};
      sendAjax(interaction);

      // detect dragging
      $(this).on('mousemove',function(event){

              interaction={type:"interaction",action:"drag",lClick:leftClick,rClick:rightClick,x:event.clientX,y:event.clientY};
              sendAjax(interaction);

        // detect mouseup
        }).mouseup(function(event){

            interaction={type:"interaction",action:"mouseup",lClick:leftClick,rclick:rightClick,x:event.clientX,y:event.clientY};
            sendAjax(interaction);

            rightClick =  false;
            leftClick = false;

            $(this).off('mousemove');
            $(this).off('mouseup');

            });       

         });
});

function sendAjax(message)
{
           $.ajax({
           url: "myServlet",
           type: "POST",
           data: message,

           success: function (data) {

            }
           }); 
 }

在Servlet中:只需打印测试性能的请求

if (request.getParameter("type") != null) {
    System.out.println(request.getParameter("action"));
         if (request.getParameter("type").equals("interaction")) {
             sendMouseActions(request.getParameter("action"), request.getParameter("lClick"), request.getParameter("rClick"), request.getParameter("x"), request.getParameter("y"));
         }
}

我最大的问题是,在拖动时,因为我必须发送每个坐标,当我查看输出时,它会继续打印出我即使停止拖动操作后拖动。这种滞后持续了一段时间。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当然会有糟糕的表现。你应该在客户端的javascript中处理鼠标移动的东西。对于拖放,只发送servlet开始和最终结束位置。 Ajax请求是异步的,因此如果每次onmousemove被触发时你发送请求,你最终都会无法获得坐标。这可能就是为什么它告诉你,在你停下来之后你还在拖着;请求失灵。