2013-07-07 22 views
8

Il problema è con le prestazioni lente nella griglia di Kendo, quando si tenta di caricare più di 1000 record la griglia impiega circa 8 secondi per caricarsi. Vedo che il controller restituisce i dati JSON in 3 secondi e quindi la griglia di kendo richiede tempo per essere completata.Griglia di Kendo: problema di prestazioni lente

Ho un PageSize di 500 record e utilizzato DataSourceRequest, quindi i dati per ciascuna pagina verranno restituiti solo dal controller. Ma ancora nessuna gioia.

Qualcuno può consigliarmi come migliorare le prestazioni della rete.

Si prega di trovare il mio codice qui sotto

@(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) 
) 
+1

Per favore, puoi aggiungere il codice di rete alla domanda iniziale. Ho creato una griglia con 1200 elementi e una dimensione di 500 pagine che non richiede nulla nel mio browser/laptop. Puoi provarlo qui http://jsfiddle.net/OnaBai/27g3s/. Stai usando modelli complessi o qualcosa del genere? – OnaBai

+1

Si prega di includere il codice utilizzato per rendere la griglia, e qualsiasi riga personalizzata o modelli di modifica che potresti aver usato. – CodingWithSpike

+0

Uso Clienttemplate e Editortemplate nelle mie colonne. EditorTemplate sta avendo la casella di testo numerico in due delle colonne. – user1870358

risposta

1

Attiva la virtualizzazione UI sulla griglia.

$(document).ready(function(){ 
     $("#grid").kendoGrid({ 
     scrollable: { 
      virtual: true // <--- This 
     } 
     }); 
    }); 

Se ciò non risulta utile, suggerirei di implementare il paging lato server.

+0

La griglia sarà lenta Se utilizzo ClientTemplate e EditTemplate.? – user1870358

+0

Dovrai pubblicare del codice, come richiesto dagli altri commentatori. – dcarson

+0

Si noti che lo scorrimento virtuale non è compatibile con il raggruppamento per [Telerik] (https://docs.telerik.com/kendo-ui/controls/data-management/grid/appearance#limitations-for-virtual-scrolling) – sonyisda1

3

Abbiamo bisogno di dare un'occhiata al controller/codice di azione che avete.

Dipende dal contenitore in cui vengono restituiti i dati, dalla mia esperienza per ottenere le prestazioni migliori per la griglia di kendo è necessario utilizzare il contenitore IQueryable ed eseguire la funzione ToDataSourceResult su questo contenitore.

public ActionResult Action([DataSourceRequest] DataSourceRequest request, string ExtraParameters) 
{ 
    DBContext db = new DBContext(); 
    IQueryable<Model> models = db.Models; 
    return Json((models).ToDataSourceResult(request)); 
} 

EDIT: anche spegnere il ServerOperation (vero) opzione

+0

.ServerOperation (falso) è ciò di cui ho bisogno. –

Problemi correlati