在IE11开发工具中解释ajax调用的长“开始”网络时序

时间:2016-08-19 14:38:40

标签: javascript ajax

在看似随机的时间,我工作的应用程序需要几秒钟才能发送ajax调用,而我在调试器中解析网络选项卡中的数据时遇到了困难。

enter image description here

基本上'开始'需要4到12秒之间的时间。如果我查看MSDN文档和浏览器本身,它会说:'从最初创建请求到发送请求的时间。'

这是什么意思?

  • 是创建xmlhttp变量和调用对象的send()方法之间的时间吗?这就是我解释“从创建到发送”的方式。这意味着该问题出现在ajax请求代码中。

  • 或者是点击GUI之间的时间,它会调用一堆函数,哪一个会触发ajax调用?这意味着事件处理程序和调用ajax函数之间存在很大的延迟。

  • 由于提出了大量请求,我是否遇到了浏览器请求队列限制?如果这可能是一个问题,有关如何检查的任何提示吗?

  • 还有别的吗?

我将包含当前代码进行ajax调用,以防选项1正确且ajax函数出错。

function get( path ) {
    var xmlhttp = null,
        domainRequest = false,
        handler,
        queryName,
        result = {};
    if (path.charAt(0) === '/') path = this.host + path;
    // Implicit resource name, get from path.
    if (arguments.length === 2) {
        queryName = path.substring(7).split('/')[1];
        handler = arguments[1];
    }
    // Explicit resource name or alias.
    else if (arguments.length === 3) {
        queryName = arguments[1];
        handler = arguments[2];
    }
    result[queryName] = {
        "value" : null,
        "info" : {
            "filtered" : false,
            "query" : queryName,
            "server" : false,
            "status" : "ERROR",
            "message" : ""                      
        }
    };
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onload = function() {
        var type = (domainRequest) ? 'text/plain' : xmlhttp.getResponseHeader('Content-Type'),
            response = (type === 'text/xml') ? xmlhttp.responseXML : xmlhttp.responseText;
        if (response) result[queryName] = response;
        else result[queryName].info.message = "Malformed data.";
        handler(result);
    };
    xmlhttp.onerror = function() {
        // Failure on the network level.
        if (window.navigator.onLine) result[queryName].info.message = "The requested resource could not be found or the service is down.";
        else result[queryName].info.message = "No network.";
        handler(result);
    };
    xmlhttp.open('GET', path);
    // CORS and IE10-IE11 withCredentials fix: the object state has to be OPEN to set the credentials flag in IE10-IE11
    xmlhttp.withCredentials = true;          
    // IE7-9 domain request premature abort fix.
    // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
    xmlhttp.ontimeout = function() {
        result[queryName].info.message = "Network timeout.";
        handler(result);
    };
    xmlhttp.onabort = function() {
        result[queryName].info.message = "Request aborted.";
        handler(result);
    };
    xmlhttp.onprogress = function() {};
    xmlhttp.send();
}

0 个答案:

没有答案