2013-07-07 42 views
8

Sự cố với hiệu suất chậm trong lưới Kendo, khi cố gắng tải hơn 1000 bản ghi, lưới sẽ mất khoảng 8 giây để tải. Tôi có thể thấy bộ điều khiển trả về dữ liệu json trong 3 giây và sau đó kendo lưới mất thời gian để cư trú.Lưới Kendo: Vấn đề hiệu suất chậm

Tôi có một PageSize 500 bản ghi và sử dụng DataSourceRequest, vì vậy dữ liệu cho mỗi trang sẽ chỉ được trả về từ bộ điều khiển. Nhưng vẫn không có niềm vui.

Bất kỳ ai cũng có thể tư vấn cho tôi cách tôi có thể cải thiện hiệu suất lưới.

Hãy tìm mã của tôi dưới đây

@(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

bạn có thể vui lòng thêm mã mạng lưới của bạn cho câu hỏi ban đầu. Tôi đã tạo ra một lưới với 1200 yếu tố và kích thước trang 500 nó không có gì trong trình duyệt/máy tính xách tay của tôi. Bạn có thể thử tại đây http://jsfiddle.net/OnaBai/27g3s/. Bạn đang sử dụng các mẫu phức tạp hay một cái gì đó như thế? – OnaBai

+1

Vui lòng bao gồm mã được sử dụng để tạo lưới và bất kỳ hàng tùy chỉnh hoặc mẫu chỉnh sửa nào mà bạn có thể đã sử dụng. – CodingWithSpike

+0

Tôi sử dụng Clienttemplate và Editortemplate trong các cột của tôi. EditorTemplate đang có hộp văn bản số trong hai cột. – user1870358

Trả lời

1

Enable UI ảo trên mạng lưới của bạn.

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

Nếu điều này không hiệu quả, tôi khuyên bạn nên triển khai phân trang bên máy chủ.

+0

Lưới có chậm không Nếu tôi sử dụng ClientTemplate và EditTemplate.? – user1870358

+0

Bạn sẽ cần phải đăng một số mã, như các áp phích bình luận khác đã yêu cầu. – dcarson

+0

Lưu ý rằng cuộn ảo không tương thích với nhóm cho mỗi [Telerik] (https://docs.telerik.com/kendo-ui/controls/data-management/grid/appearance#limitations-for-virtual-scrolling) – sonyisda1

3

Chúng tôi cần xem xét mã điều khiển/hành động mà bạn có.

Đôi khi phụ thuộc vào vùng chứa mà bạn trả lại dữ liệu của mình, để có hiệu suất tốt nhất cho lưới kendo, bạn cần sử dụng vùng chứa IQueryable và chạy hàm ToDataSourceResult của bạn đối với vùng chứa này.

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

EDIT: cũng tắt ServerOperation của bạn (true) tùy chọn

+0

.ServerOperation (sai) là những gì tôi cần. –

Các vấn đề liên quan