我目前在asp.net
mvc网站上使用jqgrid,我们的网络(内部应用程序)运行缓慢,似乎需要花费很长时间才能加载网格(问题既涉及网络,也涉及解析,渲染)
我试图确定如何最小化我发送给客户端的内容,以使其尽可能快。
这是控制器将数据加载到网格中的操作的简化视图:
[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条以上的记录),然后将其发送回GUI以放入jqgrid。
我能想到的一件事是 重复数据。
在某些json字段中,我将HTML附加在原始“数据”顶部。每个记录上的HTML都是相同的。如果我可以只发送数据并在客户端“附加”
HTML周围,这似乎会更有效率。这可能吗?然后,我只是通过电线发送实际数据,并让客户端在其余的HTML标签(div等)上添加在一起。
另外,如果还有关于如何最大程度地减少邮件大小的其他建议,那就太好了。我猜这些解决方案会在某个时候增加客户端负载,但减少网络流量可能是值得的。
我同意Craig Stuntz的观点:动态内容HTTP压缩的使用可能非常有效。但是,也非常有用的是减少发送的数据。
首先,您应该没有时间将HTML数据发送回jqGrid。jqGrid具有 自定义格式程序
(请参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_formatter和jqGrid中的一个小示例:始终显示select的可编辑列),可用于填充以下<TD>
元素的元素jqGrid单元格。此外,如果要修改网格数据,jqGrid数据内的html数据将非常糟糕。在这种情况下,应修改html数据并将其发送回服务器。因此,最好的方法是将纯数据从服务器发送到jqGrid,并使用自定义格式化程序将数据格式化为html片段。
通常,您可以使用自定义格式化程序来“解码”或“解压缩”数据。例如,如果在一列中仅包含“ Bla Bla Bla”和“ Ha Ha
Ha”之类的数据,则可以发送0(而不是“ Bla Bla Bla”)和1(而不是“ Ha Ha Ha”)。在该列的自定义格式程序内部,将0和1转换回“
Bla Bla Bla”和“ Ha Ha Ha”字符串。如果您有常规的重复数据,则此方法将行不通,但可以改用next(jsonReader
)方法。
还有另一种数据压缩方式:jsonReader
作为函数使用(请参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function和带有ASP.NET
MVC的jquery-启用ajax Web服务)和用法jsonmap
),也可以将其用作函数。这项技术稍微复杂一点,但是如果您在问题中添加当前发送的JSON数据示例和jqGrid定义示例(尤其是colModel
),那么我将编写一个示例,说明如何使用jsonReader
和jsonmap
压缩数据。
更新 :在我看来,您的代码的一个地方非常令人怀疑:
Name = "<div class='showDescription' id= '" + i.id+ "'>" + i.Name + "</div>",
jqGrid将id
属性添加到网格行(<tr>
元素),但是您向<div>
单元格(<td>
元素的子<tr>
元素)内部的元素添加了相同的ID手册。这会给您带来很多麻烦。不允许HTML具有双ID。
对应您的主要问题,我可以写很多一般性建议,例如:
0
或1
代替发送"true"
,"false"
以减少数据量。但是您可能首先想解决 特定 应用程序中的主要性能问题。为了能够改善您的特定应用程序应用程序,您应该在问题中发布有关解决方案的更多信息:
paginatedDat
,您将返回的数据Json(paginatedData)
或更好的JSON数据发送给客户端(例如,您可以从Fiddler http://www.fiddler2.com/fiddler2/复制数据)如果没有此类信息,您将无法获得真正的利益就花钱。
更新2 :您可以在[Jqgrid3.7中]找到优化JSON数据的实际示例,但不会在Internet
Explorer中显示行
问题内容: 当我将WCF配置为使用jSON序列化并将DataTable包含在我的一个DataContracts中时,它会先将DataTable序列化为XML,然后再将整个DataContract序列化为jSON。我希望将DataTable序列化为jSON,而不是XML。 我的问题是: 为什么首先将DataTable序列化为XML? 我如何才能将其序列化到jSON? 问题答案: DataTable是
这是我的操作方法 返回此错误的最佳实践是什么?以一种用户友好的方式,并且在发生错误时我可以识别该错误。
问题内容: 我正在使用许多静态HTML网站管理旧版网站,没有服务器端脚本,只有纯HTML / CSS,最少的javascript。我发现,在不同页面中多次更改同一段代码非常浪费时间。例如,当菜单中的某些内容发生更改时,由于菜单只是每个文档中的静态文本,因此我必须多次进行相同的更改。 我想知道什么是最好的策略,以最大程度地减少这种开销,换句话说,对于跨多个静态HTML页面管理导航代码之类的建议,您会
问题内容: 我正在创建一个通用的Web服务,该服务可能有许多不同的客户端,但有些客户端目前无法预料。 我已经有了一个不错的Java Services API,并希望在此之上提供一个Web服务外观。 SOAP与REST辩论的双方都有很多争论,这让我想知道是否有一种简单的方法可以同时提供两者?不一定要在同一时间将两者都用于同一部署(尽管可能不错)……而是向客户提供选择。 问题答案: 不,没有。SOAP
问题内容: 在ServiceStack网站上列出,它表明ServiceStack可以在Mono上运行,并且可以: XSP mod_mono FastCgi 安慰 这些不同的配置是什么?Mono上的Web Services首选哪种配置? 问题答案: Linux更新 从v4.5.2版本开始, ServiceStack现在支持.NET Core,它比Mono有了显着的性能和稳定性改进,Mono是从共享的
问题内容: 我花了几天的时间来更新我的个人网站。我的个人网站的网址是(我的名字)。(我的姓氏).com,因为我的姓氏很不寻常,因此我很幸运地选择了域名。我的电子邮件地址是(我的名字)@(我的名字).com。所以说真的,要归结为猜测,并不是很难。 无论如何,我想将mailto:链接集成到我的网站中,以便人们可以与我联系。而且,尽管我的电子邮件地址不是很难猜到的,但我还是不希望垃圾邮件机器人从中获取它