Как решить проблемы с производительностью в функции clearFilter() в Sencha Touch?

Я работаю в приложении Sencha Touch, и когда я использую "clearFilter()", я прилагаю большие усилия с точки зрения производительности... Например, когда я пишу в поле поиска и следую правилу, указанному в фильтре (из второй символ) Я жду секунду, чтобы написать следующий символ.. Что происходит?

В настоящее время моя реализация такова:

store.clearFilter();
if (queryString && queryString.length > 2) {
      var thisRegEx = new RegExp(queryString, "i");
      store.filterBy(function (record) {
        return (thisRegEx.test(record.get('customerId')) ||
        thisRegEx.test(record.get('customerName')) ||
        thisRegEx.test(record.get('customerAddress')));
      }, this);
    }

И работает но с указанными проблемами.

Как решить это правильно?


person inane    schedule 16.12.2015    source источник
comment
Вы не опубликовали соответствующий код.   -  person Evan Trimboli    schedule 16.12.2015
comment
Код добавлен @EvanTrimboli   -  person inane    schedule 16.12.2015
comment
Где звонок clearFilter?   -  person Evan Trimboli    schedule 16.12.2015
comment
Ранее на вопрос..   -  person inane    schedule 16.12.2015
comment
Использовали ли вы какую-либо задержку в 2-3 секунды для запуска кода после ввода символа в поле поиска?   -  person Mohit Saxena    schedule 16.12.2015
comment
Нет, я не добавляю задержку...   -  person inane    schedule 16.12.2015


Ответы (2)


clearFilter имеет suppressEvent аргумент:

true для тихой очистки без запуска события refresh.

Так что попробуй store.clearFilter(true).

person CD..    schedule 16.12.2015

Во-первых, сколько записей в магазине? Количество записей может очень сильно повлиять на это.

Чтобы повысить производительность, вы должны объединить эти 3 поля в 1 другое поле, чтобы вы могли искать в одном столбце с одним регулярным выражением. 3 регулярное выражение может быть дорогим для каждой записи. Таким образом, вы также можете использовать метод filter вместо filterBy.

Наконец, я бы предпочел использовать здесь параметр buffer для слушателя, чтобы не доставлять проблем машинисту при нажатии каждой отдельной клавиши. Например:

xtype: 'textfield',
listeners: { 
   keyup: {
       buffer: 500, // 500ms
       fn: function(){
           // filter code
       }
   }
}
person abeyaz    schedule 16.12.2015
comment
один вопрос, ваш подход с Touch или с ExtJs? потому что я не нахожу свойства буфера или enableKeyEvents... и, кстати, в моем случае у меня есть только 50 записей, основанных на одном предыдущем фильтре... - person inane; 16.12.2015
comment
@inane, но вы очистили этот фильтр, поэтому у вас более 50 записей. Лучше, чем очистка фильтра, было бы просто применить новый фильтр. Вы можете дать фильтру свойство id. Когда вы устанавливаете другой фильтр с таким же id, он перезаписывает старый. - person Alexander; 17.12.2015
comment
извините, но я не понимаю... вы говорите не использовать clearFilter()? - person inane; 17.12.2015
comment
К сожалению, enableKeyEvents удален в касании, но буфер здесь - person abeyaz; 17.12.2015