如何在单个请求上检索colmodel和数据并加快jqgrid加载

时间:2012-03-18 08:39:23

标签: asp.net-mvc jqgrid

jqGrid由ASP .NET MVC2应用程序中的远程json数据提供支持。 在页面加载时,两个请求被发送到服务器:一个用于检索具有colmodel的整个html页面,另一个用于由jqgrid调用以检索数据。

colmodel存储在数据库中,取决于用户权限和用户配置。创建colmodel需要多少次sql server调用。

这两个请求都需要在服务器中构建colmodel。对于数据检索,需要使用colmodel来获取正确的列数以构建select语句。

目前,每个请求都会为此colmodel构建两次。还需要返回总记录数,这对于大数据来说很慢(导致PostgreSql服务器中的整个结果扫描)。

如何加快速度? 如何只构建一次colmodel并在同一请求中发送它和数据?

1 个答案:

答案 0 :(得分:1)

我同意jqGrid的扩展以支持每个一个 Ajax加载colModel的某些部分将非常有用。大约一年,我发布了the feature request

你现在可以做什么:

  1. 如果我正确理解您的要求,您需要向用户显示列的子集取决于用户的权限。可以在一个 Ajax请求中实现该要求。你可以做的是:首先不要发送“隐藏”数据或作为空字符串发送。您可以向客户端发送应隐藏的列列表。在这种情况下,您可以在jqGrid中实现可变数量的列。例如,您可以在JSON响应的userData部分内发送信息。为了在许多隐藏列中获得更好的效果,我建议您在showCol内调用hideColbeforeProcessing,然后隐藏/显示空网格上的列。它会显着加快showColhideCol的效果。如果需要,您可以添加clearGridData
  2. 的额外通话
  3. 您必须优化检索colModel。我不明白为什么它应该慢。一切都取决于您的实施。无论如何,我确信可以很快地进行检索。
  4. 要提高数据库中数据请求的效果,您可以考虑不填写JSON响应的records字段并将total设置为page + 1 < / strong>即可。它使寻呼机的“下一步”按钮变得简单。仅当您返回较少的行作为total(每页的行数)时,才应将page设置为rows。在大多数情况下,检测最后一页将是一个很好的标准。您还可以在寻呼机湖上隐藏一些字段“最后”按钮和显示总页数的sp_1_...范围。您可以通过使用pgtext : "Page {0}"选项或pginput: false的使用来完成此操作,根本没有寻呼机输入。 viewrecords应为false(默认值)。完成所有自定义后,您无需计算记录总数,并且在大数据的情况下可以提高数据库请求的性能。