- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在 asp.net mvc 站点上使用 jqgrid,我们的网络(内部应用程序)非常慢,并且似乎需要很长时间才能加载网格(问题既在于网络,也在于解析,渲染)
我正在尝试确定如何最大限度地减少发送给客户端的内容,以使其尽可能快。
这是我的 Controller 将数据加载到网格中的操作的简化 View :
[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: Editable column that always shows a select 中的一个小示例),可用于填充 jqGrid 单元格的 <TD>
元素。此外,如果你想修改网格数据,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”字符串。如果您有一般重复数据,此方法将不起作用,但您可以使用下一个(jsonReader
)方法。
还有另一种数据压缩方式:将 jsonReader
作为函数使用(请参阅 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function 和 jquery with ASP.NET MVC - calling ajax enabled web service )以及使用 jsonmap
(例如,请参阅 Mapping JSON data in JQGrid ),后者也可以用作函数。这种技术有点复杂,但是如果您在问题中添加当前发送的 JSON 数据的示例以及 jqGrid 定义的示例(尤其是 colModel
),我将编写一个示例如何使用 jsonReader
和 jsonmap
来压缩数据.
更新:在我看来,你的代码的一个地方非常可疑:
Name = "<div class='showDescription' id= '" + i.id+ "'>" + i.Name + "</div>",
jqGrid 将 id
属性添加到网格行( <tr>
元素),但您手动将相同的 id 添加到单元格内部的 <div>
元素( <td>
元素,它是 <tr>
元素的子元素)。这会给你带来很多问题。 HTML 不允许有双 id。
对应你的主要问题我可以写很多一般性建议,例如:
0
或 1
,而不是 "true"
和 "false"
,以减少数据量。但您可能希望首先解决特定应用程序中的主要性能问题。为了能够改进您的特定应用程序,您应该在问题中发布有关您的解决方案的更多信息:
paginatedDat
的数据转储,您将其作为 Json(paginatedData)
或更好的 JSON 数据返回发送到客户端(例如,您可以从 Fiddler http://www.fiddler2.com/fiddler2/ 复制数据)如果没有此类信息,您可能会花掉您的赏金,而不会为您带来真正的好处。
更新2:您可以在Jqgrid 3.7 does not show rows in internet explorer中找到优化JSON数据的实际示例
关于asp.net-mvc - 在 asp.net-mvc 站点上优化 json 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2999955/
我有一个我想暂时存储的对象。该对象现在在 Controller 中, Controller 将生成一个 View 。 AJAX 请求从 View 发送到下一个 Controller 。那一刻我需要先前
从MVC 2开始,我们可以轻松创建区域。现在,我的问题与嵌套区域(区域内部的区域)有关。 选择我的“father”区域文件夹,右键单击> Add> NO选项以获取new Area。 是否有可能以其他方
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我已经尝试了一些谷歌搜索和堆栈流搜索,但事实证明这比我想象的要难找到。我需要为我们的商店迁移到 ASP.NET MVC 2 的管理提供理由。最大的帮助将是任何企业级站点或使用 ASP.NET MVC
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我有一些常见的网页,它们将出现在多个 MVC 应用程序中。对于这些页面,我想在不同的 MVC 网站之间重用相同的源代码( Controller + View )。这样做的最佳方法是什么? ASP.NE
我正在使用 Spring MVC 来构建我的应用程序。 当用户在浏览器中运行应用程序时,我想显示一个默认的 jsp。我不想用 web.xml 中的标记。 我想我可以用 我已经创建了一个文件夹并添
我可能在这里分析过度了,但是根据我对 MVC 的阅读,似乎有很多关于如何做事情的观点。 是否有一个“最佳实践”网站或文档来定义 MVC 各个部分的职责? 请记住,我使用 EF/Repository&U
当杰里米和查德 posted about their FubuMvc project ,他们提到的差异化因素之一是他们的“雷霆穹顶校长”: The “Thunderdome Principle” –
我正在为 Spring MVC 应用程序实现缓存清除系统。 为了让这个系统正常工作,我必须从给定的 url 中删除“缓存破坏代码”。假设我生成的缓存破坏代码是“123”,我有一个 .css url:/
在调试 ASP.NET MVC 源时,我发现使用了“MVC-ControllerTypeCache.xml” 文件。但我无法理解这个文件的用途。我的意思是这个文件存储在哪里?asp.net MVc 如
我刚刚在我的本地机器上安装了 Visual Studio 11 和 MVC 4 beta。但是,每当我打开一个 MVC 3 项目(我想保留为 MVC 3)时,所有引用都已更新为版本 4 DLL。当然它
我有一个 MVC 3 应用程序,它具有一些核心功能(最重要的是自动化),但主要用作不同区域或模块的门户。我想将它组织到不同的模块中,只需稍作更改也可以部署为他们自己的网站。 该项目由论坛、博客引擎、用
我有自己的服务器,正在考虑将我的一个解决方案升级到 ASP.NET MVC 4,然后再升级其余的 (3+)。 作为其中的一部分,我下载了 the standalone installer对于 ASP.
构图 我有一个 MVC 项目,其中包含 C# 类,这些类最终通过 ajax 等进行序列化和使用。我使用 TypeLite 生成这些 C# 类的定义( here 讨论了 TypeLite 的替代方案),
我正在尝试了解现代 Web 应用程序架构。在 ASP.NET MVC 中,所有业务逻辑类都在 Model 中,Controller 接受并引导用户请求。如果我使用它,是否可以使用本身是 MVC 架构但
我有一个带有 OWIN 的 WebAPI 2 应用程序。现在我正在尝试向所有内容添加一个 MVC 5 Controller ,但没有找到我的 MVC 路由。我收到以下错误: No HTTP resou
在 MVC 3 中,他们添加了我一直在使用的依赖解析器。在回答某人对您发表评论的问题时,您应该使用 Ninject MVC 3 插件。 所以我的问题是为什么要使用它而不是内置的?如果这是要走的路,你如
我是 ASP.NET MVC 的新手,我正在寻找最不痛苦的方法来设置全局错误处理、日志记录和报告(通过电子邮件)。仅供引用,我的 ASP.NET MVC 应用程序在 Azure 中作为 Web 角色托
何时使用 MVC View 页面和 MVC View 内容页面?它们有什么区别? 最佳答案 **MVC View Page 用于创建页面,MVC VewP Content Page 用于创建页面并指定
我是一名优秀的程序员,十分优秀!