2017-01-16 8 views
0

私は、テーブルを使用して可能な最も効率的な方法でクライアント側をフィルタリングしたいjsonデータの大きな塊を持っています。各ヘッダには入力フィルタがあり、ユーザーはその特定のプロパティをフィルタリングするための文字列を入力できます。ユーザーが "フリーテキスト検索"を発行できるグローバル入力フィルターもあります。カラムとグローバルフィルタを使用したフィルタテーブル - 最も効率的な方法ですか?

これを行う方法を考えていて、問題についてのあなたの意見を聞きたいのですが。フィルタ入力をクリックすると

:表

+---------------+ 
| Global filter | 
+---------------+ 

+----------+---------+----------+-----------+ 
| Column 1 | Colum 2 | Column 3 | Column 4 | 
+----------+---------+----------+-----------+ 
| ... | ... | ... | ... | 
+----------+---------+----------+-----------+ 

オプション1を可視化するために

  1. データのセットを生成入力されたすべてのフィルタexcepフィルタがクリックされ、キャッシュされます。キーアップ時
  2. - これはOKだろうステップ1

からの結果に基づいてデータをフィルタリングします。しかし、いくつかの検索が何度も行われるため、やはりオーバーヘッドが発生します。


オプション2:キーアップオン

  1. - ブラー上にキャッシュ検索
  2. に基づいてフィルタ - 現在の結果はキャッシュされた検索を上書きします。

フィルタを追加するだけであれば、これはさらに効果的です。しかし、既に人口の多いフィルターを変更したいときには、ロジックは "壊れます"。


オプション3:

これは、フィルタ入力にクリックすると1と2のミックスのようになります。フィルタはデフォルト値が含まれていない場合

  1. (すなわちユーザーが入力したフィルターデータがない場合)、現在のフィルター以外のすべてのフィルターに基づいてキャッシュを生成します。
  2. キャッシュされた検索に基づくフィルタ
  3. ぼかしの場合 - 現在の結果がキャッシュされた検索を上書きします。

私は自分自身でブレーンストーミングきたし、オプション3は、私はシンプルさと性能の面で思い付くことが最高の方法です。

私は正しい経路にいますか?どう思いますか?

/パトリック

答えて

1

第三の選択肢は良いですが、マイナーな問題があるように見えます。あなたが使用していて、フィルタはデフォルト値が含まれていない場合はベースのフィルタリングは、あなたではなく(すなわち、ユーザが入力したフィルタなしのデータ)は、除くすべてのフィルタに基づいてキャッシュを生成しません。この

  1. のような手順を持つべきであると仮定すると、現在のもの。
  2. フィルタにある値が含まれている場合、はキャッシュを破棄します。クリックされたフィルタを除いて、すべての移入されたフィルタから一連のデータを生成し、キャッシュします。
  3. キーアップ時 - 上記のキャッシュ結果に基づくフィルタ。
  4. ぼかしの場合 - 現在の結果がキャッシュされた検索を上書きします。

details = [ {user:"A",location:"kansas"}, {user:"B",location:"kansas"}, {user:"C",location:"phoenix"}, {user:"D",location:"phoenix"} ]

[ ]がテキストボックスであると仮定します。まず、両方の今、ユーザーが [user=] [location=kansas]

//final cache :[{user:"A",location:"kansas"},{user:"B",location:"kansas"}] 

都市を入力してください [user=""] [location=""]

空になっている今、ユーザがユーザ名

[user=A] [location=kansas]

検索に使用されたキャッシュ入力しようとします:[{user:"A",location:"kansas"},{user:"C",location:"kansas"}]

// final cache after step 3: `[{user:"A",location:"kansas"}]` 

今、ユーザーが検索に使用0結果

キャッシュできます別の都市 [user=A] [location=phoenix] //を入力したい:一部のフィルタによるフィルタリングは、「場所」がすでに減少し、結果セットを使用してはならないと言うたび[{user:"A",location:"kansas"}]

を以前はこのフィルタ。

+0

私は、現在のフィルタが既にキャッシュに影響を与えているとは考えていませんでした。他の誰かが答えたいと思った場合には、このスレッドに未回答のままにしておきます。どうもありがとうございました! – PatrikJ

+0

あまりにも大きい説明に余分に感謝! – PatrikJ

+0

それは何もなかった...歓声! – Viney

関連する問題