2012-12-10 4 views
8

Tôi có ASP.Net MVC3 ứng dụng trong đó có một trang một phần tải một tải trọng lớn của điều khiển html (khoảng Count = 980) mà nó có xác nhận giao cho họ.Jquery unobtrusive xác nhận hoạt động rất chậm ASP.Net MVC3

Xác thực không rõ ràng của JQuery mất nhiều thời gian để xác thực biểu mẫu bằng các điều khiển ở trên. Nó đánh hiệu suất của ứng dụng. Có một cách để cải thiện, làm thế nào xác nhận được thực hiện trên các yếu tố của DOM?

Trả lời

6

Tôi gặp vấn đề tương tự. Chúng tôi không tìm thấy cách dễ dàng để cải thiện hiệu suất.

Tôi phải vô hiệu xác nhận không phô trương và phía máy khách cho trang. Biểu mẫu mất 10 + giây để hiển thị và chỉ có id và hộp kiểm mỗi mục cho khoảng 1000 mục. Sau khi chúng tôi đã xóa trang của khách hàng và tải trang không phô trương khoảng 1 giây

Chúng tôi vừa xác thực trên bộ điều khiển.

Bạn có thể sử dụng những người giúp đỡ cấp độ trang

Html.EnableClientValidation(false); 
Html.EnableUnobtrusiveJavaScript(false); 
+0

Woa! Tôi tò mò, loại chức năng nào có hàng nghìn đầu vào trong cùng một trang? – vtortola

+1

Tính năng yêu cầu của khách hàng. Muốn có thể xác nhận hàng loạt trong phần quản trị viên. Không muốn phân trang và không muốn Ajax. Vì vậy, một hình thức khổng lồ nó được. – GraemeMiller

+2

ahh ... khách hàng điên rồ ... – vtortola

2

Tôi đã xem qua vấn đề này ngày hôm nay. Tôi nhận ra rằng có một sự suy giảm đáng kể trên một trong những danh sách lớn của tôi. Có một tùy chọn để xem tất cả và trong chế độ xem đó, có một biểu mẫu trên mỗi dòng để xóa các mục. jquery.validate.unobtrusive đã hủy trang này khi tải. Khi nó đã được gỡ bỏ, tải chỉ là 2s. Nhiều người trong số các hình thức không cần xác nhận, nhưng một số vẫn làm. Do đó, tôi đã xem mã cho tệp và tìm thấy mã này:

parse: function (selector) { 
     /// <summary> 
     /// Parses all the HTML elements in the specified selector. It looks for input elements decorated 
     /// with the [data-val=true] attribute value and enables validation according to the data-val-* 
     /// attribute values. 
     /// </summary> 
     /// <param name="selector" type="String">Any valid jQuery selector.</param> 
     $(selector).find(":input[data-val=true]").each(function() { 
      $jQval.unobtrusive.parseElement(this, true); 
     }); 

     $("form").each(function() {//THIS IS THE OFFENDING CODE 
      var info = validationInfo(this); 
      if (info) { 
       info.attachValidation(); 
      } 
     }); 
    } 

Tôi nhận thấy rằng tôi cần phải thay đổi cuộc gọi đó bằng cách nào đó nhưng vẫn giữ lại chức năng. Những gì tôi đã làm cuối cùng là đánh dấu tất cả các hình thức của tôi mà tôi không muốn đi qua phương pháp phân tích cú pháp này với class="skipValid". Sau đó, trong mã nguồn, tôi đã thực hiện thay đổi này:

$("form:not(.skipValid)").each(function() { 

và tôi có cả hai thế giới tốt nhất.