【问题标题】:Rapid ajax requests to servlet causing performance issues对 servlet 的快速 ajax 请求导致性能问题
【发布时间】:2013-11-21 19:18:48
【问题描述】:

我是使用 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"));
         }
}

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

【问题讨论】:

    标签: servlets


    【解决方案1】:

    当然这会带来不好的表现。您应该在客户端处理 javascript 中的鼠标移动内容。对于拖放发送 servlet 仅开始和最终结束位置。 Ajax 请求是异步的,因此如果您在每次触发 onmousemove 时发送请求,最终都会导致坐标乱序。这可能就是为什么它告诉您停止后仍在拖动的原因;请求出现故障。

    【讨论】:

    • 感谢您的回复。不过,根据要求,我需要使用客户端脚本跟踪鼠标移动,然后将其全部发送到 servlet。例如,我不能只发送拖动的开始和结束坐标。我必须把所有东西都寄到。也许 ajax 不是我应该考虑的解决方案?
    • 您可以将数组中的所有点保存在javascript中并在最后发送。你在做一个绘图应用程序吗?即使您不是,查看一些最终将图像发送到服务器的 HTML5 绘图应用程序也可能会有所帮助。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多