@Hanry654

Как оптимизировать поиск нужной фразы в json обьектах?

Сейчас будет абсурд, и вы будете писать зачем мне это нужно, НО есть вебсокет по которому каждые 2 секунды приходит массив с данными
[
  {
    "id": 345,
    "descripton": "test follow maybe test test"
  },
  // ... 740 length
]

И мой список фраз, на 1млн строчек
[
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test"
  // ... 1mln length


Когда приходят новые данные по вебсокету, я их проверяю
for (object of wsData) {
  for (myPhrase of myPhrasesList) {
    // Если есть совпадение, вызываю функцию отправки сообщения в тг и отдельный запрос на сайт
  }
}


Так вот, при нагрузке в 1 млн строк, отправка сообщения в тг и отдельный запрос на сайт, занимаааает очеееееень много времении, нежели при нагрузке в 10к, при 10к строк, все работает на отменно.
upd
что я имел ввиду, сам поиск проходит быстро и функа тоже вызывается за считанные секунды, но вот выполнение функции медленное, и может занимать до 40 секунд

Так вот, как оптимизировать всю эту хрень, и чтобы все работало шустро и класно? При этом чтобы все не отваливалось при нагрузке, ибо как я понял(ну мои догадки) данные приходят же каждые 2 секунды, и нагрузка нарастает все больше и больше и это плохо ибо не успевают провериться прошлые данные как приходят новые. Есть варианты решений?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
// Это должно быть вне обработчика закэшировано
const myPhrasesList = new Set([
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test",
  "test test test test test"
  // ... 1mln length
]);

for (object of wsData) {
    if (!myPhrasesList.has(object.description)) {
       continue;
    }

    this.notification(object, object.description).then()
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы