2012-12-10 13 views
8

私はASP.Net MVC3アプリケーションには、巨大な負荷のhtmlコントロール(Count = 980)をロードする部分的なページがあります。Jqueryの控えめな検証は非常に遅いです。ASP.Net MVC3

JQuery上記のコントロールを使用してフォームの妥当性を検証するには、しばらく時間がかかります。そのアプリケーションのパフォーマンスを打つ。 DOMの要素に対してバリデーションがどのように行われるか、改善する方法はありますか?

答えて

6

同じ問題がありました。パフォーマンスを改善する簡単な方法は見つけられませんでした。

ページの目立たないクライアント側の検証を無効にする必要がありました。フォームはレンダリングするのに10秒以上かかっていましたが、アイテムごとにIDとチェックボックスがあり、アイテムは約1000アイテムでした。クライアントサイドを削除して目立たないページを読み込んだ後、約1秒で表示されました。

コントローラで検証しました。

あなたは、私が今日、この問題に出くわした

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

Woa!私は好奇心を持っています、どのような種類の機能が同じページに1000の入力を持っていますか? – vtortola

+1

機能が必要なクライアント。管理セクションで一括確認できるようにしたいページングを望まず、Ajaxを望んでいませんでした。だから巨大な形だった。 – GraemeMiller

+2

ああ...クレイジーな顧客... – vtortola

2

これらのページレベルのヘルパーを使用することができます。私は大きなリストの1つに著しい減速があったことに気付きました。すべてを表示するオプションがあり、そのビューにアイテムを削除するための行が1つずつあります。 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() { 

と私は両方の世界のベストを持っていた。

関連する問題