IE中的ajax调用非常慢

时间:2015-04-23 13:27:00

标签: javascript jquery ajax internet-explorer

我的网页上有以下Ajax代码。它基本上对数据库进行Ajax调用并返回一堆记录。 这段代码在Firefox中运行得很快/但在IE中运行速度非常慢。 我只是想知道是否有任何方法可以为IE优化此代码。

代码

var fill_test_table = function(data){
        var tr;
        for (var i=0; i < data.length; i++) {
                tr=$('<tr/>');
                tr.append("<td>" + widget[i].name + "</td>");
                tr.append("<td>" + widget[i].age + "</td>");
                tr.append("<td>" + widget[i].status + "</td>");
                tr.append("<a href='widget.html?id=" + widget[i].id + "&age=" + widget[i].age + "&status=" + widget[i].status + "&name=" + widget[i].name.replace("'","%27") + "'</a><button>Edit</button>&nbsp;</td>");    
                $("#widget_table").append(tr);
        }
        $("#widget_table").append("</tbody>");
};


$(document).ready ( function() {
               $.ajax({
                url: "/cgi-bin/getwdigets",
                dataType: "json",                
                success: function(data) {
                        fill_test_table(data); 
                      }
                  });
        })

我找到了以下帖子jQuery Ajax call very slow in IE, but instant in Firefox并试图实施一些建议。但如果有任何明显的项目需要修复,我想知道。

4 个答案:

答案 0 :(得分:2)

问题是渲染页面,而不是ajax调用。所以你应该试试这样的事情:

Fragment
希望它有所帮助。

答案 1 :(得分:0)

ajax调用没有错。 for循环是它在IE中非常慢的原因。

尝试创建一个字符串,然后将其附加到DOM。

尝试创建文档片段,然后将片段附加到DOM中。

答案 2 :(得分:0)

试试这个

var fill_test_table = function(data){
    var innerHtml = '';
    for (var i=0; i < data.length; i++) {
        innerHtml +='<tr><td>' + widget[i].name + '</td>'
            +'<td>' + widget[i].age + '</td>'
            +'<td>' + widget[i].status + '</td>'
            +'<td><a href="widget.html?id=' + widget[i].id + '&age=' + widget[i].age + '&status=' + widget[i].status + '&name=' + widget[i].name.replace("'","%27") + '"</a><button>Edit</button>&nbsp;</td></tr>';    
    }
    $("#widget_table").html('<tbody>'+innerHtml+'</tbody>');
};

答案 3 :(得分:0)

我敢打赌,这不是请求本身很慢,而是你的循环添加了dom元素。此外,您错过了包含该链接的最后一个单元格的开始load。这应该更快:

func load(user: User) -> RACSignal {
    return self.getBlocks(user).doNext {
        self.blocks = $0 as! [Block]
    }
}

private func getBlocks(fromUser: User) -> RACSignal {
    let query = Block.query()!
    query.whereKey("fromUser", equalTo: fromUser)
    query.includeKey("toUser")

    return query.rac_findObjects()
}