Задать вопрос
@Kizzeon

Как можно наиболее быстро искать данные по JSON файлу?

Сейчас я делаю поиск по базе данных вида:
var matches = array.filter(array=> {
    const regex = new RegExp(`${searchText}`, 'gi'),
          stateName = state.name,
          stateData = String(state.data);
    return stateName.match(regex) || stateData.match(regex); // здесь дольше всего
  });


Но он находит данные жутко долго

Посоветуйте пожалуйста как можно оптимизировать этот код
  • Вопрос задан
  • 503 просмотра
Подписаться 2 Простой 4 комментария
Решения вопроса 1
@Che603000
c 2011 javascript
const searchText = ‘....’;
const regex = new RegExp(searchText, 'gi'); // вынести за цикл filter

var matches = array.filter(state=> {
  const name = state.name, 
         data =  state.data.toString();
    return regex.test(name) || regex.test(data);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Interface
Если у вас "json" это пришедший из postgress'овского jsonb поля - то postgress умеет делать запросы внутри jsonb: https://hackernoon.com/how-to-query-jsonb-beginner... (первая ссылка в гугле).

Если такой вариант не подходит очевидная оптимизация - высунуть создание регэкспа из цикла. Хотя я не уверен, что какой-нить v8 это несоптимизировал самостоятельно. (на моей машине это сокращает время втрое примерно)

Какой у вас объем данных? Поиск по множеству строк не должен занимать много времени. И пока у вас не миллионы этих строк все должно быть быстро. Эквивалентный код на моей машине выполняет проход регэкспом по массиву из миллиона строк менее чем за 100мс. Если у вас бОльшие объемы или хотя бы сопоставимые - вы что-то делаете не так :) Ну или если вы ожидаете обработку такого объема данных моментально, то стоит скорректировать ожидания.

P.s. это нода или браузер? Если нода - то пляски на стороне js все равно не имеют смысл так как радикально ускорить не получится, а вот 2-3 пользователя ищущие что-то вам все положат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы