2012-12-10 19 views
8

Mam aplikację ASP.Net MVC3, w której znajduje się strona częściowa, która ładuje ogromny ładunek formantów html (około Count = 980), który ma przypisaną walidację.Dyskretna walidacja Jquery działa bardzo wolno ASP.Net MVC3

JQuery Dyskretna walidacja trwa długo, aby zweryfikować formularz za pomocą powyższych elementów sterujących. Uderza w wydajność aplikacji. Czy istnieje sposób poprawy, w jaki sposób przeprowadza się walidację elementów DOM?

Odpowiedz

6

Miałem ten sam problem. Nie znaleźliśmy łatwego sposobu na poprawę wydajności.

Musiałem wyłączyć dyskretną weryfikację strony klienta dla strony. Formularz zajmował 10 + sekundę do renderowania i miał tylko identyfikator i pole wyboru dla pozycji na około 1000 pozycji. Po usunięciu strony klienta i niezauważalnym ładowaniu strony było około 1 s.

Właśnie sprawdziliśmy na kontrolerze.

Można korzystać z tych pomocników poziomie strony

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

Woa! Ciekaw jestem, jaka funkcjonalność ma tysiąc wejść na tej samej stronie? – vtortola

+1

Funkcja żądanego klienta. Chciał być w stanie zbiorczo potwierdzić w dziale administracyjnym. Nie chciał stronicowania i nie chciał Ajax. A więc była to gigantyczna forma. – GraemeMiller

+2

ahh ... szaleni klienci ... – vtortola

2

natknąłem tej kwestii dzisiaj. Zdałem sobie sprawę, że na jednej z moich dużych list wystąpiło znaczące spowolnienie. Istnieje możliwość wyświetlenia wszystkich, a w tym widoku istnieje formularz w linii do usuwania elementów. jquery.validate.unobtrusive niszczył tę stronę podczas ładowania. Po usunięciu obciążenie wynosiło tylko 2s. Wiele formularzy nie wymagało walidacji, ale niektóre z nich nadal. W rezultacie, spojrzałem w kodzie pliku i stwierdziliśmy:

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(); 
      } 
     }); 
    } 

zdałem sobie sprawę, że muszę jakoś zmienić tego połączenia, ale wciąż zachowują funkcjonalność. To, co zrobiłem, to zaznaczyć wszystkie moje formularze, że nie chciałem przejść przez tę metodę parse z class="skipValid". Następnie w kodzie źródłowym wprowadziłem tę zmianę:

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

i miałem najlepsze z obu światów.

Powiązane problemy