Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理缓慢的Ajax请求/连接缓慢的人_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何处理缓慢的Ajax请求/连接缓慢的人

Javascript 如何处理缓慢的Ajax请求/连接缓慢的人,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是一个“假设”情况 假设我有: 一个websocket告诉我在url上发送ajax,如http://localhost/Whatever每10秒一次 http://localhost/Whatever回复需要45秒(请根据具体情况列出电话号码) 我想知道浏览器会有什么反应?在我看来,有三种情况: (好的一个):浏览器真的很聪明:他理解我们的ajax 相同的url,这样他在当前调用之前不会堆栈ajax调用 完成了 浏览器理解我们使用相同的url,并在 Ajax第一次调用并启动一个新的(如果浏览器

这是一个“假设”情况

假设我有: 一个websocket告诉我在url上发送ajax,如
http://localhost/Whatever
每10秒一次

http://localhost/Whatever
回复需要45秒(请根据具体情况列出电话号码)

我想知道浏览器会有什么反应?在我看来,有三种情况:

  • (好的一个):浏览器真的很聪明:他理解我们的ajax 相同的url,这样他在当前调用之前不会堆栈ajax调用 完成了
  • 浏览器理解我们使用相同的url,并在 Ajax第一次调用并启动一个新的(如果浏览器真的这样做了,它会 在我心目中,这将是垃圾)
  • (最坏情况):每次websocket询问时,浏览器都会在url上发送ajax 让他停下来等待答案。此外,我想会有一个 parralel ajax请求的限制问题?(我不知道这是怎么回事 浏览器(如果发生这种情况?)
  • 那么,哪种情况会发生,为什么会发生?

    答案是情况3

    浏览器将按照您的请求顺序发送所有请求。一般来说,计算机会按照您发出指令的顺序执行指令。如果您想要或需要特殊的行为,例如限制请求的速率,或者在前一个请求完成之前不发送后续请求,那么您需要自己实现这些行为。

    答案是案例3

    浏览器将按照您的请求顺序发送所有请求。一般来说,计算机会按照您发出指令的顺序执行指令。如果您想要或需要特殊的行为,例如限制请求的速率,或者在前一个请求完成之前不发送后续请求,那么您需要自己实现这些行为。

    答案是案例3

    浏览器将按照您的请求顺序发送所有请求。一般来说,计算机会按照您发出指令的顺序执行指令。如果您想要或需要特殊的行为,例如限制请求的速率,或者在前一个请求完成之前不发送后续请求,那么您需要自己实现这些行为。

    答案是案例3


    浏览器将按照您的请求顺序发送所有请求。一般来说,计算机会按照您发出指令的顺序执行指令。如果您想要或需要特殊的行为,例如限制请求的速率或在前一个请求完成之前不发送后续请求,您需要自己实现这些行为。

    Imho,此伪代码可能会对您有所帮助

    var requestLock = false;
    
    function pollFromSocket() {
      if (someCondition) {
        sendRequest();
      }
    }
    
    function sendRequest() {
      if (requestLock) {
        return;
      }
    
      requestLock = true;
    
      $.get('/whatever')
        .done(function(response) {
          // process response
        })
        .always(function() {
          requestLock = false;
        });
    }
    

    嗯,这个伪代码可能对你有帮助

    var requestLock = false;
    
    function pollFromSocket() {
      if (someCondition) {
        sendRequest();
      }
    }
    
    function sendRequest() {
      if (requestLock) {
        return;
      }
    
      requestLock = true;
    
      $.get('/whatever')
        .done(function(response) {
          // process response
        })
        .always(function() {
          requestLock = false;
        });
    }
    

    嗯,这个伪代码可能对你有帮助

    var requestLock = false;
    
    function pollFromSocket() {
      if (someCondition) {
        sendRequest();
      }
    }
    
    function sendRequest() {
      if (requestLock) {
        return;
      }
    
      requestLock = true;
    
      $.get('/whatever')
        .done(function(response) {
          // process response
        })
        .always(function() {
          requestLock = false;
        });
    }
    

    嗯,这个伪代码可能对你有帮助

    var requestLock = false;
    
    function pollFromSocket() {
      if (someCondition) {
        sendRequest();
      }
    }
    
    function sendRequest() {
      if (requestLock) {
        return;
      }
    
      requestLock = true;
    
      $.get('/whatever')
        .done(function(response) {
          // process response
        })
        .always(function() {
          requestLock = false;
        });
    }
    


    您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,[2]等待第一个请求并在第一个请求结束时呼叫第二个请求,[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个操作,您的代码(或您正在使用的库)必须实施those@Miraage我当然更喜欢我的第一个案例->你的[3]。但正如patrick Evans所说,第三种是默认行为,你可以控制浏览器对每种情况的反应。例如,在案例一中,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后只返回该变量。浏览器上的AJAX请求最终将在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您更喜欢哪种行为?[1]中止第一个请求并启动第二个请求,[2]等待第一个请求并在第一个请求结束时调用第二个请求,[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码如下:(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]但我同意patrick Evans所说的第三种是默认行为。您可以控制浏览器对每种情况的反应。例如,在第一种情况下,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后仅返回该变量。第三种情况下浏览器上的ppen。浏览器上的AJAX请求最终会在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,还是[2]等待第一个请求并在第一端调用第二个请求,或者[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]但我同意patrick Evans所说的第三种是默认行为。您可以控制浏览器对每种情况的反应。例如,在第一种情况下,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后仅返回该变量。第三种情况下浏览器上的ppen。浏览器上的AJAX请求最终会在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,还是[2]等待第一个请求并在第一端调用第二个请求,或者[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]。但我同意patrick Evans所说的第三个案例将是默认行为。你可以控制浏览器的访问方式