asp.net mvc网站上的服务器端JSON和jqGrid loadComplete之间的长延迟

时间:2010-06-15 21:10:19

标签: asp.net-mvc json jqgrid

我有一个asp.net mvc网站,我用json数据加载jqgrid

这是我的控制器操作代码:

    public ActionResult GridData(GridData args)
    {
        IEnumerable<Application> applications = EntityModel.GetAll().ToList();
        applications = FilterEntities(applications);
        if (args.sidx.IsNullOrEmpty() || args.sidx == "Id")
        {
            args.sidx = "Name";
            args.sord = "asc";
        }
        applications = applications.GridSort(args.sidx, args.sord);
        var paginatedData = applications.GridPaginate(args.page ?? 1, args.rows ?? 10,
                                                      i => new
                                                      {
                                                          i.Id,
                                                          Name = "<div class='showDescription' Id= '" + i.MyId + "'>" + i.Name + "</div>",
                                                          MyId = string.Format("<a                                                               i.LastUpdated,
                                                          i.LastUpdatedColumn
                                                      });

        return Json(paginatedData);
    }

这是我的javascript代码:

function doInitCrudGrid(controller, names, model, editable, querystring) {
jQuery("#grid").jqGrid({
    mtype: 'POST',
    url: "/" + controller + "/GridData?" + querystring,
    datatype: "json",
    colNames: names,
    colModel: model,
    imgpath: "/Scripts/jqGrid/themes/steel/images",
    rowNum: 20,
    rowList: [10, 20, 50, 999],
    altRows: true,
    altclass: "altRow",
    jsonReader: {
        root: "Rows",
        page: "Page",
        total: "Total",
        records: "Records",
        repeatitems: false,
        id: "Id"
    },
    pager: "#pager",
    height: "auto",
    sortname: "Id",
    viewrecords: true,
    sortorder: "desc",
    loadComplete: function() {

        alert("Load Complete");
    },
    ondblClickRow: function(rowid) { }
});

我在

上有一个断点
return Json(paginatedData);

行并且会很快被击中,但之后需要大约10秒钟才能完成:

 alert("Load Complete");

以及渲染显示在网页上。

无论如何调试这个或方法,看看为什么在完成服务器端json和在javascript回调上对loadcomplete进行组织之间会有这么大的延迟?

2 个答案:

答案 0 :(得分:1)

为了确定您遇到问题的地方,我建议您测量双方的时间。例如,在您的JavaScript中执行以下操作:

var startTime = new Date();
// do something
var totalTime = new Date() - startTime;

并在您的控制器操作中

using System;

public ActionResult GridData(GridData args) {
    DateTime startTime = DateTime.Now;
    // do something
    TimeSpan totalTime = DateTime.Now - startTime;
    // save or log totalTime
    System.DateTime date4 = date3.Subtract(diff1);
    return Json(paginatedData);
}

在此之后,您将确切地知道您遇到主要性能问题的哪一方。

答案 1 :(得分:0)

你回来了多少数据?序列化和反序列化可能需要很长时间。您是否考虑过返回PartialView并用返回的html替换div的内容?