0

Facebook の友達でいっぱいのストアにリンクされたリストがあります。約 350 のレコードが含まれています。キーアップ時に次の機能をトリガーするリストの上部に検索フィールドがあります。

  filterList: function (value) {
    // console.time(value);
    if (value === null) return;

    var searchRegExp = new RegExp(value, 'g' + 'i'),
        all = Ext.getStore('Friends'),
        recent = Ext.getStore('Recent'),
        myFilter;

    all.clearFilter();
    recent.clearFilter();

    // console.log(value, searchRegExp);

    myFilter = function (record) {
      return searchRegExp.test(record.get('name'));
    }

    all.filter(myFilter);
    recent.filter(myFilter);
    // console.timeEnd(value);
  },

現在、これは ST2.1.1 で問題なく動作していましたが、アプリを ST2.2 にアップグレードしたためです。本当に遅いです。iOSでSafariがフリーズしてクラッシュすることさえあります...

これはログが与えるものです:

t /t/gi Friends.js:147
t: 457ms Friends.js:155
ti /ti/gi Friends.js:147
ti: 6329ms Friends.js:155
tit /tit/gi Friends.js:147
tit: 7389ms Friends.js:155
tito /tito/gi Friends.js:147
tito: 7137ms 

なぜ今このように動作するのか、またはより良いフィルター方法を持っている人はいますか?

アップデート

パラメータを指定して呼び出すclearFiltertrue速度が向上するように見えますが、まだ以前ほど速くはありません。

アップデート

実際には、ストアのフィルタリングとは何の関係もありません。

リストアイテムのレンダリングに関係しています。Sencha は、いくつかのリストアイテムを作成して再利用するのではなく、ストアにあるすべてのレコードに対してリストアイテムを作成しているようです

ここに画像の説明を入力

このように振る舞う明らかな理由はありますか?

4

1 に答える 1

5

リストの「無限」設定を true に設定していますか?

一度に 300 以上の行をレンダリングするリストはおそらく望ましくないため、そのフラグを設定すると、生成される DOM の量が削減されます。

于 2013-05-17T14:27:43.607 に答える