2010-06-08 85 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

相關問題