| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > поиск подстроки |
| Автор: 31416 4.11.2008, 15:56 |
| вообщем есть текстовый фильтр который работает на js суть в следующем - с сервера подгружается список некоторых объектов (текстовые строки) далле юзер может фильтровать эти строки - вводит некоторый текст и откидываются строки которые НЕ содержат его (текст юзера) как подстроку. все совдится к тому что эта ф-я: var text_filter = function check_filter(text, search) { if(text.toLowerCase().indexOf(search.toLowerCase()) + 1) return true; return false; } вызывается примерно по циклу для пары сотен строк, так вот это очень медленно работает если строк скажем несколько сотен. я так понимаю что скорее всего медленно работает indexOf.. и нужно искать какую то ему альтернативу... подскажите как ускорить? |
| Автор: Michael.de 4.11.2008, 19:38 | ||||||||
31416, если передавать в ф-цию вместо search уже готовый search.toLowerCase(), то выполнение чуть ускорится (я добавил else):
можно поэкспериментировать и вытащить check_filter() в отдельную ф-цию:
P.S. можно ещё короче... вместо:
P.P.S. единственное, что не понял... что делает между скобок +1: indexOf(search + 1) ? |
| Автор: SelenIT 4.11.2008, 20:12 | ||
Видимо, превращает -1 в 0, а 0 в 1 - для получения однозначного булевского рез-та Хотя, конечно, и короче, и логичнее было бы написать это как
|
| Автор: lusever 4.11.2008, 21:03 | ||
Регулярное выражение тут будет работать быстрее:
Регексп конечно же лучше кэшировать и эскейпить. |
| Автор: IDVsbruck 5.11.2008, 00:05 |
| Однозначно регулярка! И проще, и гораздо шустрее ... |
| Автор: 31416 5.11.2008, 09:59 |
| да, спасибо! попробвал регулярку стало более менее, хотя все-равно чувствуется на больших объекмах.. тут советовали еще соединить все строки в одну, и сразу одним применением регулярки отобрать нужные - было бы скорее всего еще быстрее,чем по циклу, но пока и так устраивает) |
| Автор: IDVsbruck 5.11.2008, 12:59 |
| Если объем текста очень приличный, то может быть эффективней отдать это серверу - отдавать ему вводимый пользователем текст и разбирать на серваке, а клиенту возвращать только требуемое. |
| Автор: mxt 7.11.2008, 19:47 |
| возможно нужно оптимизировать, но не только тут, у вас примерно такой план работы: 1. задаются параметры фильтра, 2. Фильтруются строки 3, Вывод отфильтрованных данных пользователю. Возможно нужно проводить оптимизацию в 3 пункте? |
| Автор: 31416 15.11.2008, 21:39 |
| IDVsbruck, да чего то не хочется сервер такими задачами напрягать.. mxt, а какая там в 3-ем может быть оптимизация? там просто хтмл строится и все |