2010-06-08 86 views
3

我目前在asp.net mvc网站上使用jqgrid,并且我们有一个非常慢的网络(内部应用程序),它似乎正在采取网格需要很长时间才能加载(问题是网络以及解析,渲染)什么是在asp.net-mvc网站上优化我的json的最佳方式

我想确定如何最小化我发送到客户端的速度以尽可能快地完成。

这里是我的控制器操作将数据加载到网格的简化视图:

 [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult GridData1(GridData args) 
    { 
     var paginatedData = applications.GridPaginate(args.page ?? 1, args.rows ?? 10, 
     i => new 
      { 
     i.Id, 
     Name = "<div class='showDescription' id= '" + i.id+ "'>" + i.Name + "</div>", 
     MyValue = GetImageUrl(_map, i.value, "star"), 
     ExternalId = string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>", 
     Url.Action("Link", "Order", new { id = i.id }), i.Id), 
       i.Target, 
       i.Owner, 
       EndDate = i.EndDate, 
       Updated = "<div class='showView' aitId= '" + i.AitId + "'>" + GetImage(i.EndDateColumn, "star") + "</div>", 
                 }) 

     return Json(paginatedData); 
    } 

所以我建立了一个JSON(我有大约200条以上),并发送回放入jqgrid的GUI。

我可以做的一件事是重复的数据。在一些json字段中,我在原始“数据”之上附加了HTML。这是每个记录上的相同HTML。看起来如果我可以发送数据并在客户端“附加”HTML,效率会更高。这可能吗?然后,我只是通过电线发送实际数据,并将客户端添加到HTML标签(divs等)的其余部分。

此外,如果有任何其他建议我如何最大限度地减少我的邮件的大小,那就太好了。我想在某些时候这些解决方案会增加客户端的负载,但它可能是值得的,以减少网络流量。

+0

你能在你的问题的描述包括您目前使用的jqGrid的定义,您当前用来发送JSON数据的示例从服务器(至少有一两行)。 – Oleg 2010-06-13 17:18:53

回答

8

我同意Craig Stuntz:使用动态内容的HTTP压缩可以非常有效。但是非常有用的还可以减少发送的数据。

首先,你应该没时间把HTML数据发送回jqGrid。 jqGrid有自定义格式化程序(请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_formatter和一个从jqGrid: Editable column that always shows a select的小例子),它可以用来填充jqGrid单元的元素的<TD>。此外,如果您想修改网格数据,jqGrid数据中的html数据非常糟糕。在这种情况下,应该修改html数据并发送回服务器。所以最好的方法是将纯数据从服务器发送到jqGrid,并使用自定义格式化程序将数据格式化为html片段。

一般来说,您可以使用自定义格式化程序来“解码”或“解压缩”数据。例如,如果列中只有“Bla Bla Bla”和“Ha Ha Ha”等数据,则可以发送0而不是“Bla Bla Bla”,而不是“Ha Ha Ha”发送1。在列的自定义格式化程序的内部,您将0和1转换回“Bla Bla Bla”和“Ha Ha Ha”字符串。如果您有一般重复数据,则此方法无效,但您可以使用下一个(jsonReader)方式。

有数据压缩的另一种方式:的jsonReader作为函数的使用(见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_functionjquery with ASP.NET MVC - calling ajax enabled web service)和jsonmap使用(见Mapping JSON data in JQGrid例如),其也可以用作函数。这种技术稍微复杂一些,但是如果你在你的问题中添加一个当前发送的JSON数据的例子和jqGrid定义的例子(特别是colModel),我会写一个例子来说明如何使用jsonReaderjsonmap来压缩你的数据。

修订:你的代码的一个地方,似乎对我很怀疑:

Name = "<div class='showDescription' id= '" + i.id+ "'>" + i.Name + "</div>", 

的jqGrid添加id属性到网格行(<tr>元素),但您添加的手动相同ID的<div>元素在单元格内(<td>元素,它是<tr>元素的子元素)。这可能会导致很多问题。一个HTML不允许有双ID。

对应你的主要问题,我可以写很多的一般性建议,如:

  • 最好是送布尔为01代替"true""false"减少数据。
  • 如果网格中有id数据,则可以使用键列选项(请参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options)在JSON数据中只发送一次id值。
  • 以最简洁的形式将日期值转换为yy-m-d,并将其转换为您希望在客户端就日期格式化程序提供的文本形式。

,但可能你想首先要解决你的特定应用的主要性能问题。为了能够提高您的特定应用程序,你应该张贴在你的问题你的解决方案的更多信息:从paginatedDat一个

没有这种信息,你可以花你的赏金没有真正的好处给你。

更新2:JSON数据优化的一个实际的例子,你可以找到在Jqgrid 3.7 does not show rows in internet explorer

1

将您的服务器设置为ZIP responses。这将处理重复的数据。

1

你的建议去,如果要追加在客户端的HTML,检查出的jqGrid的格式化程序:

http://www.secondpersonplural.ca/jqgriddocs/_2kn0mlo1p.htm

-

此外,虽然我猜有一个每页返回200多条记录的商业理由是服务器端分页选项?

+0

我们是分页,但即使是分页(每页最多约20条记录),仍然有点慢 – leora 2010-06-08 20:25:36

相关问题