0

列チューザーに問題があり、追加または削除する列を選択した後に結果を表示するのが非常に遅いです。「setGroupHeaders」に問題があることに気付きました。Chooser と Group Header の対の列は、パフォーマンスが良くないようです。

私は JqGrid 4.3.1 を使用しており、最後の jquery ライブラリを使用しています。この問題は以前のバージョンでも発生しました (問題が古いバージョンに起因しないことを確認するために、すべてのライブラリを最新の状態にする必要がありました)。

これに関する投稿を見つけるためにフォーラムを実際に検索しましたが、何も見つかりません。この問題を抱えているのは私だけですか? 参照されていますか?

よろしくお願いします。

4

1 に答える 1

0

多数の列 (> 500 列) で列選択が非常に遅いという同じ問題がありました。私はtreegridを使用しているため、ほとんどのパフォーマンス向上薬(微調整を意味します)を服用できません。グリッドを適用して再描画するだけで 3 分以上かかる場合があります。

しかし、私は汚い残忍な方法を思いつきました。私にとってユニークなことは、常にデータのコピーを保持していることです (js でローカルな json 形式)。したがって、再描画にはネットワーク トラフィックがまったくありません。そこで、自分で列チューザーを実装し、残忍なアンロードを実行してグリッドを再作成します。現在、選択した列を適用して再描画するには、最大で約 10 秒以上かかります。

これが私の列チューザーのコードです。ご覧のとおり、私のプログラムに非常に特化していますが、アイデアを得ることができます。ファンシーな GUI はこちらから。

choose_column: function() {
  var me = this;
  var rn=this.response_json.colNames;
  var rm=this.response_json.colModel;
  var line_text;

  var html_text = '<select id="column_selector" class="multiselect" multiple="multiple" name="countries[]" style="width: 500px; margin: 0px auto; height: 340px; ">\n';

  for ( var i = 0 ; i < rn.length; i++ ) {
    if (rm[i].hidden) {
      line_text = '<option value="'+i+'">'+rn[i]+'</option>\n';
    } else {
      line_text = '<option value="'+i+'" selected="selected">'+rn[i]+'</option>\n';
    }
    html_text += line_text;
  }

  html_text += '</select>';

  jQuery("#dlg_choose_columns").empty()
  .append(html_text);
  jQuery(".multiselect").multiselect({
    sortable: true, 
    searchable: true,
    hide: 'explode',
    show: 'blind',
    dividerLocation: 0.5
  });
  jQuery("#dlg_choose_columns").dialog({
    width: 535,
    height: 550,
    modal: true,
    title: 'Select Columns',
    hide: 'explode',
    buttons: {
      "Ok": function() {
        var selected_values = jQuery(".multiselect").val();
        for ( var i = 0; i < rn.length; i++ ) {
          rm[i].hidden = true;
        }
        for ( var i = 0; i < selected_values.length; i++ ) {
          delete rm[selected_values[i]].hidden;
        }
        jQuery("#dlg_choose_columns").dialog("close"); 
        me.unload_jqgrid();
        me.create_grid(null, me.is_tree, me.need_plot);
      },
      "Cancel": function() {
        jQuery("#dlg_choose_columns").dialog("close"); 
      }
    }
  });

}
于 2012-08-09T22:52:15.457 に答える