У меня есть список из примерно 200 пунктов (в строках таблицы):JQuery оптимизация фильтра (низкая производительность на мобильных устройствах)
<tr><td><h5>Title</h5></td>
<td class="nazwa">some text</td>
<td>Some additional stuff</td>
</tr>
Я создал функцию JQuery, который фильтрует (показывает или скрывает) элементы, если они матч искал строку
jQuery.fn.filterItems = function(str){
var title = jQuery(this).find("h5").text().toLowerCase();
var name = jQuery(this).find(".nazwa").text().toLowerCase();
if(title.search(str) < 0 && name.search(str) < 0){
jQuery(this).hide().removeClass("visible");
}
else{
jQuery(this).show().addClass("visible");
}
return this;
}
Каждый раз, когда пользователь вводит что-то в поисковый ввод автоматически фильтрует элементы и показывает те, соответствующие входной:
jQuery("#search_items").on("input", function(){
var s = jQuery(this).val();
if(s != ""){
jQuery('.list-of-items tr').each(function(){
jQuery(this).filterItems(s.toLowerCase());
});
}
else{
jQuery('.list-of-items tr').show().addClass("visible");
}
});
Это отлично работает на ПК, но у меня есть проблемы с производительностью на мобильных устройствах. Иногда между входом и фильтрацией происходит довольно задержка.
Как я могу оптимизировать этот живой поиск с точки зрения эффективности/использования ресурсов?
Я использовал бы половину секунды или второй тайм-аут от 'input' до фактического фильтра. Если пользователь вводит 8-значное слово - вы очень быстро выполняете 8 фильтров - когда на самом деле вам нужно только один раз, повторный ввод. – tymeJV
https://davidwalsh.name/javascript-debounce-function - прежде всего взгляните на эту ссылку (подробнее о jquery debounce) – stefanz
@stefanz - я реализовал это решение и, похоже, немного помог. Пожалуйста, подумайте о том, чтобы написать это предложение в качестве ответа, чтобы я мог принять его в качестве решения, если ti будет работать. – Gacek