问题是Kendo网格性能下降,当尝试加载1000条记录时,网格需要大约8秒才能加载.我可以看到控制器在3秒内返回json数据,然后kendo网格需要时间来填充.
我有一个500个记录的PageSize并使用了DataSourceRequest,因此每个页面的数据只会从控制器返回.但仍然没有快乐.
任何人都可以请教我如何提高电网性能.
请在下面找到我的代码
@(Html.Kendo().Grid<Model>() .Name("KendoTestGrid") .Columns(columns => { columns.Bound(p => p.Column5) .Width("18%") .ClientTemplate("#= formatResult(format(column5,'')) #") .EditorTemplateName("Column5") .ClientFooterTemplate("<span href='\\#' id='total'>Total : </span>"); columns.Bound(p => p.Column6) .EditorTemplateName("Column6") .ClientTemplate("#= format(column6,'') #") .ClientFooterTemplate("<span href='\\#' id='spanfooter'></span>") .Width("23%"); columns.Bound(p => p.column7) .ClientTemplate("<span href='\\#' id='#=Id #'>#= format(Column7,'')#</span>") .ClientFooterTemplate("<span href='\\#' id='spansum'></span>") .HtmlAttributes(new { Class = "number" }) .Width("18%"); columns.Bound(p => p.column8) .EditorTemplateName("column8") .ClientFooterTemplate("Total:") .ClientFooterTemplate("<span href='\\#' id='TotalSum1'></span>") .Width("23%"); }) .DataSource(dataSource => dataSource .Ajax() .Batch(true) .ServerOperation(true) .Read(read => read.Action("Action","Controller").Data("getData")) .Create(c => c.Action("Action","Controller").Data("getData2")) .Update(update => update.Action("Action","Controller").Data("getData3")) .PageSize(500) .Events(x => x.DataBound("ongriddatabound") .Edit("ongridedit") .Change("ongridchange")) .Editable(editing => editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell)) .Filterable() .Groupable() .Sortable() .Scrollable() .Pageable() .Selectable(s => s.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) .Resizable(resize => resize.Columns(true)) .AutoBind(false) )
解决方法
我们需要查看您拥有的控制器/操作代码.
这取决于您返回数据的容器,根据我的经验,您需要使用IQueryable容器并针对此容器运行ToDataSourceResult函数,以获得最佳性能.
public ActionResult Action([DataSourceRequest] DataSourceRequest request,string ExtraParameters) { DBContext db = new DBContext(); IQueryable<Model> models = db.Models; return Json((models).ToDataSourceResult(request)); }
编辑:也关闭ServerOperation(true)选项