0

チェックボックスを使用してjqGridの列を表示または非表示にしていますが、セルに多くの値が含まれる行が多数あるため、チェックボックスをオンにするとチェックが完了するまでに長い時間がかかります。

チェックボックスをすぐにチェックしてから、時間のかかるjqGrid操作を実行したいと思います。例えば、

$('input[type="checkbox"]').click(function(e) {
    // First render/unrender the checkmark    
    // Next do some very time-consuming jqGrid operations
}

どうすればこれを達成できますか?現状では、最初にjqGrid呼び出しを実行し、最後にcheckoxをチェックするだけです。チェックボックスをオンにするのに完全に2秒かかります!

4

3 に答える 3

3

時間のかかるコードをタイムアウト内に配置してみてください。

// immediate stuff here
setTimeout(function() {
   // time-consuming stuff here
},1);

理想的には、UI がフリーズしないように、時間のかかるものを Web Worker に配置する必要があります。

于 2013-02-16T22:35:43.433 に答える
2

ページとスクリプトで最適化を行うことができます。

  1. <body>タグの末尾の前にスクリプトを配置します。
  2. ツールを使用してパフォーマンスを改善する :これに推奨できる最適なツールはdynaTrace AJAX Editionです。これはIE 用のプロファイラーです (通常、JS のパフォーマンスが最も遅いため、実際には最適化を開始するための優れたテスト環境です)。完全な内訳を提供し、繰り返されるメソッド呼び出し、呼び出しツリー、および CPU サイクルがどこに行っているかを示します。 開始するには、使用法/機能に関するチュートリアルをチェックしてください
  3. 大規模なデータ セットで jQuery のパフォーマンスを向上させるには、次のトピックが含まれます。

  1. jQuery の $.each() ヘルパー関数の代わりに、JavaScript ネイティブの for() ループを使用します。

  2. ループ内の DOM に要素を追加しないでください。

  3. DOM に挿入する要素が多数ある場合は、
    パフォーマンスを向上させるためにそれらを親要素で囲みます。

  4. 文字列連結を使用しないでください。代わりに、非常に長い文字列には配列の join() メソッドを使用してください。

  5. 長いリストのループおよび連結
    関数には setTimeout() 関数を使用します。

  6. スクリプトを縮小する

うまくいけば、これらはより良いパフォーマンスを得るのに十分です

于 2013-02-16T22:37:01.357 に答える
0

ある関数でチェックマークをレンダリング/レンダリング.click()解除してから、別の関数で jqGrid 操作を実行できると思います.click()。すなわち

$('#selector').click(
    function(){//rendering stuff}
).click(
    function(){//computational stuff}
);
于 2013-02-16T22:41:09.720 に答える