2012-12-10 22 views
8

मेरे पास ASP.Net MVC3 एप्लिकेशन है जिसमें एक आंशिक पृष्ठ है जो HTML नियंत्रण का एक बड़ा भार लोड करता है (गणना = 980 के आसपास) जिसमें इसे असाइन किया गया सत्यापन है।Jquery अविभाज्य सत्यापन बहुत धीमी गति से काम करता है ASP.Net MVC3

JQuery Unobtrusive सत्यापन में उपरोक्त नियंत्रण के साथ फ़ॉर्म को सत्यापित करने में काफी समय लग रहा है। यह आवेदन के प्रदर्शन को मार रहा है। क्या सुधार करने का कोई तरीका है, डीओएम के तत्वों पर सत्यापन कैसे किया जाता है?

उत्तर

6

मुझे एक ही समस्या थी। हमें प्रदर्शन में सुधार करने का कोई आसान तरीका नहीं मिला।

मुझे पृष्ठ के लिए अविभाज्य और क्लाइंट साइड सत्यापन अक्षम करना पड़ा। प्रपत्र प्रस्तुत करने के लिए 10 + सेकंड ले रहा था और लगभग 1000 आइटमों के लिए प्रति आइटम केवल एक आईडी और चेकबॉक्स था। क्लाइंट साइड को हटाने के बाद और अविभाज्य पृष्ठ लोड लगभग 1 सेकंड

हमने अभी नियंत्रक पर मान्य किया था।

आप इन पेज स्तर सहायकों

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

वाह! मैं उत्सुक हूं, उसी पृष्ठ में किस तरह की कार्यक्षमता में हजारों इनपुट हैं? – vtortola

+1

सुविधा ग्राहक की मांग की। एक व्यवस्थापक खंड में थोक पुष्टि करने में सक्षम होना चाहता था। पेजिंग नहीं चाहते थे और अजाक्स नहीं चाहते थे। तो यह एक विशाल रूप था। – GraemeMiller

+2

आह ... पागल ग्राहक ... – vtortola

2

मैं आज इस मुद्दे में आए उपयोग कर सकते हैं। मुझे एहसास हुआ कि मेरी बड़ी सूचियों में से एक पर महत्वपूर्ण मंदी हुई थी। सभी को देखने का एक विकल्प है, और उस दृश्य में वस्तुओं को हटाने के लिए प्रति पंक्ति एक रूप है। jquery.validate.unobtrusive लोड पर इस पृष्ठ को नष्ट कर रहा था। जब इसे हटा दिया गया था, तो लोड केवल 2 था। कई रूपों में कोई सत्यापन की आवश्यकता नहीं थी, लेकिन कुछ अभी भी किए गए थे। नतीजतन, मैं फ़ाइल के लिए कोड में देखा और यह पाया:

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

मुझे एहसास हुआ कि मैं किसी भी तरह कि कॉल को बदलने की जरूरत है, लेकिन अभी भी कार्यक्षमता बरकरार रहती है। मैं जो कर रहा हूं वह मेरे सभी रूपों को चिह्नित करना था कि मैं class="skipValid" के साथ इस पार्स विधि से नहीं जाना चाहता था। फिर, स्रोत कोड में, मैंने यह परिवर्तन किया:

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

और मेरे पास दोनों दुनिया के सर्वश्रेष्ठ थे।